7ba58e56078ee27d2b308b671c3b0893f1b1781b
[gd/win32-spoolss/.git] / EnumPrinterDrivers.c
1 /******************************************************************\r
2  * SPOOLSS regression testing code for Samba print servers\r
3  * \r
4  *****************************************************************/\r
5 \r
6 #include <windows.h>\r
7 #include <stdio.h>\r
8 \r
9 #define NUM_ARCH        5\r
10 const LPTSTR arch [NUM_ARCH] = {        "Windows 4.0",\r
11                                                         "Windows NT x86",\r
12                                                         "Windows NT R4000",\r
13                                                         "Windows NT PowerPC",\r
14                                                         "Windows NT Alpha_AXP"  };\r
15 \r
16 int main (int argc, char* argv[])\r
17 {\r
18         DWORD   needed, returned, i, j;\r
19         PDRIVER_INFO_1  buffer1 = NULL;\r
20         PDRIVER_INFO_2  buffer2 = NULL;\r
21         PDRIVER_INFO_3  buffer3 = NULL;\r
22         \r
23         if (argc < 2)\r
24         {\r
25                 fprintf (stderr, "useage: %s <servername>\n", argv[0]);\r
26                 exit (-1);\r
27         }\r
28 \r
29         for (i=0; i<NUM_ARCH; i++)\r
30         {\r
31                 printf ("\n\n[%s]\n", arch[i]);\r
32 \r
33                 /* INFO LEVEL 1 */\r
34                 needed = returned = 0;\r
35                 EnumPrinterDrivers(argv[1], arch[i], 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
36                 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
37                 {\r
38                         if (needed != 0)\r
39                                 fprintf (stderr, "Error EnumPrinterDrivers Info Level 1 for [%s] using NULL buffer.\n", argv[1]);\r
40                         else\r
41                                 printf ("Info level 1 returned no information\n");\r
42                 }\r
43                 else\r
44                 {\r
45                         if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
46                         {\r
47                                 fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
48                                 exit (-1);\r
49                         }\r
50                         if (!EnumPrinterDrivers(argv[1], arch[i], 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
51                         {\r
52                                 fprintf (stderr, "Error enumerating printer drivers Info Level 1 for [%s].\nSize of buffer = %d\n", \r
53                                                 argv[1], needed);\r
54                         }\r
55 \r
56                         printf ("Driver Info Level 1\n");\r
57                         for (j=0; j<returned; j++)\r
58                         {\r
59                                 printf ("\tDriver Name\t= %s\n\n", buffer1[j].pName);\r
60                                 printf ("\n");\r
61                         }\r
62                         free (buffer1);\r
63                 }\r
64 \r
65                 /* INFO LEVEL 2 */\r
66                 needed = returned = 0;\r
67                 EnumPrinterDrivers(argv[1], arch[i], 2, (LPBYTE)buffer2, 0, &needed, &returned);\r
68                 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
69                 {\r
70                         if (needed != 0)\r
71                                 fprintf (stderr, "Error EnumPrinterDrivers Info Level 2 for [%s] using NULL buffer.\n", argv[1]);\r
72                         else\r
73                                 printf ("Info level 2 returned no information\n");\r
74                 }\r
75                 else\r
76                 {\r
77                         if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
78                         {\r
79                                 fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
80                                 exit (-1);\r
81                         }\r
82                         if (!EnumPrinterDrivers(argv[1], arch[i], 2, (LPBYTE)buffer2, needed, &needed, &returned))\r
83                         {\r
84                                 fprintf (stderr, "Error enumerating printer drivers Info Level 2 for [%s].\nSize of buffer = %d\n", \r
85                                                 argv[1], needed);\r
86                         }\r
87 \r
88                         printf ("\nDriver Info Level 2\n");\r
89                         for (j=0; j<returned; j++)\r
90                         {\r
91                                 printf ("\tDriver Name\t= %s\n",        buffer2[j].pName);\r
92                                 printf ("\tEnvironment\t= %s\n",        buffer2[j].pEnvironment);\r
93                                 printf ("\tVersion\t\t= %d\n",          buffer2[j].cVersion);\r
94                                 printf ("\tDriver Path\t= %s\n",        buffer2[j].pDriverPath);\r
95                                 printf ("\tData File\t= %s\n",          buffer2[j].pDataFile);\r
96                                 printf ("\tConfig File\t= %s\n\n",      buffer2[j].pConfigFile);\r
97                                 printf ("\n");\r
98                         }\r
99                         free (buffer2);\r
100                 }\r
101 \r
102                 /* INFO LEVEL 3 */\r
103                 needed = returned = 0;\r
104                 EnumPrinterDrivers(argv[1], arch[i], 3, (LPBYTE)buffer3, 0, &needed, &returned);\r
105                 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
106                 {\r
107                         if (needed != 0)\r
108                                 fprintf (stderr, "Error EnumPrinterDrivers Info Level 3 for [%s] using NULL buffer.\n", argv[1]);\r
109                         else\r
110                                 printf ("Info level 3 returned no information\n");\r
111                 }\r
112                 else\r
113                 {\r
114                         if ((buffer3 = (LPBYTE)malloc(needed)) == NULL)\r
115                         {\r
116                                 fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
117                                 exit (-1);\r
118                         }\r
119                         if (!EnumPrinterDrivers(argv[1], arch[i], 3, (LPBYTE)buffer3, needed, &needed, &returned))\r
120                         {\r
121                                 fprintf (stderr, "Error enumerating printer drivers Info Level 3 for [%s].\nSize of buffer = %d\n", \r
122                                                 argv[1], needed);\r
123                         }\r
124 \r
125                         printf ("\nDriver Info Level 3\n");\r
126                         for (j=0; j<returned; j++)\r
127                         {\r
128                                 char*   ptr;\r
129 \r
130                                 printf ("\tDriver Name\t= %s\n",        buffer3[j].pName);\r
131                                 printf ("\tEnvironment\t= %s\n",        buffer3[j].pEnvironment);\r
132                                 printf ("\tVersion\t\t= %d\n",          buffer3[j].cVersion);\r
133                                 printf ("\tDriver Path\t= %s\n",        buffer3[j].pDriverPath);\r
134                                 printf ("\tData File\t= %s\n",          buffer3[j].pDataFile);\r
135                                 printf ("\tConfig File\t= %s\n",        buffer3[j].pConfigFile);\r
136                                 printf ("\tHelp Path\t= %s\n",          buffer3[j].pHelpFile);\r
137                                 printf ("\tMonitor Name\t= %s\n",       buffer3[j].pMonitorName);\r
138                                 printf ("\tData Type\t= %s\n",          buffer3[j].pDefaultDataType);\r
139                                 ptr = (char*)buffer3->pDependentFiles;\r
140                                 while (*ptr != '\0')\r
141                                 {\r
142                                         printf ("\tDependent Files\t= %s\n", ptr);\r
143                                         for (;*ptr != '\0'; ptr++)\r
144                                                 /* printf ("%s\n", ptr); */\r
145                                                 ;\r
146                                         ptr++;\r
147                                 }\r
148 \r
149                                 printf ("\n");\r
150                         }\r
151                         free (buffer3);\r
152                 }\r
153 \r
154         }\r
155 \r
156 \r
157         return 0;\r
158 \r
159 }\r
160 \r