1 /******************************************************************
\r
2 * SPOOLSS regression testing code for Samba print servers
\r
4 *****************************************************************/
\r
8 #include "printlib.h"
\r
10 void PrintNotifyInfoData(PRINTER_NOTIFY_INFO_DATA *p)
\r
12 printf("\tType\t=0x%x\n", p->Type);
\r
13 printf("\tField\t=0x%x\n", p->Field);
\r
14 printf("\tId\t=0x%x\n", p->Id);
\r
15 printf("\tdata\t= %s\n", p->NotifyData.Data.pBuf);
\r
22 int main (int argc, char* argv[])
\r
25 HANDLE server, change;
\r
26 PRINTER_NOTIFY_INFO *change_info = NULL;
\r
27 PRINTER_NOTIFY_OPTIONS watch, *pWatch = NULL;
\r
28 PRINTER_NOTIFY_OPTIONS_TYPE data;
\r
29 DWORD option = PRINTER_CHANGE_PRINTER_DRIVER;
\r
30 BOOL use_notify_options = TRUE;
\r
32 DWORD flags = PRINTER_NOTIFY_OPTIONS_REFRESH;
\r
36 if ((argc < 3) || (strcmp(argv[1], "-l") && strcmp(argv[1], "-t")))
\r
38 fprintf (stderr, "usage: -l|-t %s <servername>\n", argv[0]);
\r
42 if (strcmp(argv[1], "-l") == 0)
\r
43 use_notify_options = FALSE;
\r
46 if (!OpenPrinter (argv[2], &server, NULL))
\r
53 printf ("Printer [%s] opened successfully.\n\n", argv[2]);
\r
56 printf ("flags = PRINTER_CHANGE_PRINTER\n");
\r
59 watch.pTypes = &data;
\r
60 data.Type = PRINTER_NOTIFY_TYPE;
\r
62 data.pFields = &option;
\r
64 if (use_notify_options) {
\r
66 option = PRINTER_NOTIFY_FIELD_DRIVER_NAME;
\r
69 if ((change=FindFirstPrinterChangeNotification(server, option, 0, pWatch)) == INVALID_HANDLE_VALUE)
\r
71 printf ("FindFirstPrinterChangeNotification failed : ");
\r
73 ClosePrinter(server);
\r
77 printf ("FindFirstPrinterChangeNotification succeeded with flags [PRINTER_CHANGE_PRINTER_DRIVER]\n\n");
\r
80 printf ("Calling FindNextPrinterCangeNotification() with PRINTER_NOTIFY_OPTIONS_REFRESH\n");
\r
81 memset(&watch, 0x0, sizeof(watch));
\r
82 watch.Flags = PRINTER_NOTIFY_OPTIONS_REFRESH;
\r
84 if (FindNextPrinterChangeNotification(change, &condition, pWatch, &change_info))
\r
85 printf ("Received change notification of [0x%x]\n", condition);
\r
92 printf("\tVersion\t=0x%x\n", change_info->Version);
\r
93 printf("\tFlags\t=0x%x\n", change_info->Flags);
\r
94 printf("\tCount\t=%d\n", change_info->Count);
\r
96 for (i=0; i<(int)change_info->Count; i++) {
\r
97 PrintNotifyInfoData(&change_info->aData[i]);
\r
102 FreePrinterNotifyInfo(change_info);
\r
109 printf ("Waiting for Printer Change Notification...\n");
\r
111 if (WaitForSingleObject(change, INFINITE) != WAIT_OBJECT_0)
\r
114 if (FindNextPrinterChangeNotification(change, &condition, NULL, &change_info))
\r
115 printf ("Received change notification of [0x%x]\n", condition);
\r
122 printf("\tVersion\t=0x%x\n", change_info->Version);
\r
123 printf("\tFlags\t=0x%x\n", change_info->Flags);
\r
124 printf("\tCount\t=%d\n", change_info->Count);
\r
126 for (i=0; i<(int)change_info->Count; i++) {
\r
127 PrintNotifyInfoData(&change_info->aData[i]);
\r
132 FreePrinterNotifyInfo(change_info);
\r
137 if (FindClosePrinterChangeNotification(change))
\r
138 printf ("FindClosePrinterChangeNotification call succeeded.\n");
\r
141 printf ("FindClosePrinterChangeNotification failed : ");
\r
146 if (!ClosePrinter(server))
\r
149 printf ("Printer [%s] closed successfully.\n", argv[2]);
\r