PRINTER_NOTIFY_OPTIONS_TYPE

PRINTER_NOTIFY_OPTIONSのpTypesに、PRINTER_NOTIFY_OPTIONS_TYPEの配列を指定し、それぞれのPRINTER_NOTIFY_OPTIONS_TYPEのpFieldsに、PRINTER_NOTIFY_FIELD_XXXや、JOB_NOTIFY_FIELD_XXXなどの定数配列を指定すると、pPNIが取れる。

PRINTER_NOTIFY_OPTIONS_TYPE structure (Winspool.h) - Win32 apps | Microsoft Docs
FindNextPrinterChangeNotification

PRINTER_NOTIFY_OPTIONS_TYPE.cppで、

とすると、

Microsoft Windows [Version 10.0.19043.1415]
(c) Microsoft Corporation. All rights reserved.

C:\Users\bg1>cd C:\Users\bg1\Documents\test

C:\Users\bg1\Documents\test>PRINTER_NOTIFY_OPTIONS_TYPE.exe
thread begin before.
thread wait before.
threadproc begin before.
Default Printer: EPSON PX-S06 Series
hPrinter: 0x004d723c
pTI->m_hHandles[0]: 0x00000150
pTI->m_hHandles[1]: 0x00000154
notify!
PRINTER_CHANGE_SET_PRINTER_DRIVER
notify!
PRINTER_CHANGE_SET_PRINTER
PRINTER_CHANGE_ADD_JOB
pPNI->Version = 2
pPNI->Flags = 131072
pPNI->Count = 25
pPNI->aData[i].Id = 00000000
pPNI->aData[i].Type = 00000000
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
notify!
PRINTER_CHANGE_WRITE_JOB
pPNI->Version = 2
pPNI->Flags = 131072
pPNI->Count = 2
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
notify!
PRINTER_CHANGE_SET_JOB
pPNI->Version = 2
pPNI->Flags = 131072
pPNI->Count = 7
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
notify!
PRINTER_CHANGE_WRITE_JOB
pPNI->Version = 2
pPNI->Flags = 131072
pPNI->Count = 4
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
notify!
PRINTER_CHANGE_WRITE_JOB
pPNI->Version = 2
pPNI->Flags = 131072
pPNI->Count = 2
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
notify!
PRINTER_CHANGE_WRITE_JOB
pPNI->Version = 2
pPNI->Flags = 131072
pPNI->Count = 2
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
notify!
PRINTER_CHANGE_SET_JOB
pPNI->Version = 2
pPNI->Flags = 131072
pPNI->Count = 1
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
notify!
PRINTER_CHANGE_SET_PRINTER
PRINTER_CHANGE_SET_JOB
PRINTER_CHANGE_DELETE_JOB
pPNI->Version = 2
pPNI->Flags = 131072
pPNI->Count = 12
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
pPNI->aData[i].Id = 00000000
pPNI->aData[i].Type = 00000000
pPNI->aData[i].Id = 00000002
pPNI->aData[i].Type = 00000001
threadproc after before.
thread close before.

C:\Users\bg1\Documents\test>

pPNI自体は確かに取れてる。
ただし、出し方はこれで合ってるかは不明。

Sample/winapi/PRINTER_NOTIFY_OPTIONS_TYPE/P_N_O_T/src/PRINTER_NOTIFY_OPTIONS_TYPE at master · bg1bgst333/Sample · GitHub