module spool test SPOOL_NOTIFY_INFO struct BUFFER5 { .align 4; uint32 buf_len; {buf_len} uint16 buffer; }; struct UNISTR2 { .align 4; uint32 max_len; uint32 undoc; uint32 str_len; {str_len} uint16 buffer; }; struct UINT64_S { uint32 low; uint32 high; }; struct NTTIME { uint32 low; uint32 high; }; struct PRINTER_DRIVER_INFO_LEVEL_3 { .align 4; uint32 cversion; UNISTR2 *name; UNISTR2 *environment; UNISTR2 *driverpath; UNISTR2 *datafile; UNISTR2 *configfile; UNISTR2 *helpfile; UNISTR2 *monitorname; UNISTR2 *defaultdatatype; uint32 dependentfiles_len; BUFFER5 *dependentfiles; }; struct PRINTER_DRIVER_INFO_LEVEL_6 { .align 4; uint32 dummy1; uint32 version; UNISTR2 *name; UNISTR2 *environment; UNISTR2 *driverpath; UNISTR2 *datafile; UNISTR2 *configfile; UNISTR2 *helpfile; UNISTR2 *monitorname; UNISTR2 *defaultdatatype; uint32 dependentfiles_len; BUFFER5 *dependentfiles; uint32 previousnames_len; BUFFER5 *previousnames; NTTIME driverdate; UINT64_S driverversion; uint32 dummy4; UNISTR2 *mfgname; UNISTR2 *oemurl; UNISTR2 *hardwareid; UNISTR2 *provider; }; struct PRINTER_DRIVER_INFO { .align 4; uint32 level; union level *info { case 3 PRINTER_DRIVER_INFO_LEVEL_3 info_3; case 6 PRINTER_DRIVER_INFO_LEVEL_6 info_6; } }; struct NOTIFY_DATA_VALUE { uint32 value0; uint32 value1; }; struct NOTIFY_DATA_STRING { uint32 length; {length} uint16 string; }; struct SPOOL_NOTIFY_INFO_DATA { uint16 type; uint16 field; uint32 reserved; uint32 id; union enc_type *notify_data { case 1 NOTIFY_DATA_VALUE value; case 0 NOTIFY_DATA_STRING string; } uint32 size; uint32 enc_type; }; struct SPOOL_NOTIFY_INFO { uint32 version; uint32 flags; uint32 count; SPOOL_NOTIFY_INFO_DATA *data; };