add SetPrinterDataExW.exe.
[gd/win32-spoolss/.git] / EnumPorts.c
1 /******************************************************************
2  * SPOOLSS regression testing code for Samba print servers
3  *
4  *****************************************************************/
5
6 #include <windows.h>
7 #include <stdio.h>
8
9
10 int main (int argc, char* argv[])
11 {
12
13         DWORD                   returned, needed, i;
14         PPORT_INFO_1    buffer1 = NULL;
15         PPORT_INFO_2    buffer2 = NULL;
16
17         if (argc < 2)
18         {
19                 fprintf (stderr, "useage: %s <servername>\n", argv[0]);
20                 exit (-1);
21         }
22
23         /* INFO LEVEL 1 */
24         needed = returned = 0;
25         EnumPorts(argv[1], 1, (LPBYTE)buffer1, 0, &needed, &returned);
26         if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
27         {
28                 fprintf (stderr, "Error getting port information for [%s] using NULL buffer.\n", argv[1]);
29                 exit (-1);
30         }
31
32         if ((buffer1 = (PPORT_INFO_1)malloc(needed)) == NULL)
33         {
34                 fprintf (stderr, "Unable to malloc memory for PORT_INFO_1 buffer!\n");
35                 exit (-1);
36         }
37         if (!EnumPorts(argv[1], 1, (LPBYTE)buffer1, needed, &needed, &returned))
38         {
39                 fprintf (stderr, "Error getting port information for [%s].\nSize of buffer = %d\n",
40                              argv[1], needed);
41                 exit (-1);
42         }
43
44         printf ("Port Info Level 1:\n");
45         for (i=0; i<returned; i++)
46         {
47                 printf ("\tPort Name\t= %s\n", buffer1[i].pName);
48                 printf ("\n");
49         }
50         free (buffer1);
51
52         /* INFO LEVEL 2 */
53         needed = returned = 0;
54         EnumPorts(argv[1], 2, (LPBYTE)buffer2, 0, &needed, &returned);
55         if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
56         {
57                 fprintf (stderr, "Error getting port information for [%s] using NULL buffer.\n", argv[1], argv[2]);
58                 exit (-1);
59         }
60
61         if ((buffer2 = (PPORT_INFO_2)malloc(needed)) == NULL)
62         {
63                 fprintf (stderr, "Unable to malloc memory for PORT_INFO_2 buffer!\n");
64                 exit (-1);
65         }
66         if (!EnumPorts(argv[1], 2, (LPBYTE)buffer2, needed, &needed, &returned))
67         {
68                 fprintf (stderr, "Error getting port information for [%s].\nSize of buffer = %d\n",
69                              argv[1], needed);
70                 exit (-1);
71         }
72
73         printf ("Port Info Level 2:\n");
74         for (i=0; i<returned; i++)
75         {
76                 printf ("\tPort Name\t= %s\n",          buffer2[i].pPortName);
77                 printf ("\tMonitor Name\t= %s\n",       buffer2[i].pMonitorName);
78                 printf ("\tDescription\t= %s\n",        buffer2[i].pDescription);
79                 printf ("\tType\t\t= 0x%x\n",           buffer2[i].fPortType);
80                 printf ("\tReserved\t= %d\n",           buffer2[i].Reserved);
81                 printf ("\n");
82         }
83         free (buffer2);
84
85
86         return 0;
87
88 }