add SetPrinterDataExW.exe.
[gd/win32-spoolss/.git] / GetPrinter.c
index c9c2f56a25f99f63b84cf559f388c57238f2491a..271eb56d15b3d91cdb4000d61722b06993557816 100644 (file)
@@ -11,17 +11,19 @@ int main (int argc, char* argv[])
 {
        DWORD   needed, returned;
        HANDLE  printer;
-       PPRINTER_INFO_1 buffer1 = NULL;
-       PPRINTER_INFO_2 buffer2 = NULL;
-       PPRINTER_INFO_5 buffer5 = NULL;
-       PPRINTER_INFO_7 buffer7 = NULL;
+       LPBYTE buffer = NULL;
+       DWORD level = 1;
 
        if (argc < 2)
        {
-               fprintf (stderr, "useage: %s <printername>\n", argv[0]);
+               fprintf (stderr, "useage: %s <printername> [level]\n", argv[0]);
                exit (-1);
        }
 
+       if (argc == 3) {
+               level = atoi(argv[2]);
+       }
+
        /* open the printer */
        if (!OpenPrinter (argv[1], &printer, NULL))
        {
@@ -33,133 +35,30 @@ int main (int argc, char* argv[])
                printf ("Printer [%s] opened successfully.\n\n", argv[1]);
        }
 
-
-       /* INFO LEVEL 1 */
        needed = returned = 0;
-       GetPrinter(printer, 1, (LPBYTE)buffer1, 0, &needed);
-       if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
-       {
-               if (needed != 0)
-                       fprintf (stderr, "Error GetPrinter Info Level 1 for [%s] using NULL buffer.\n", argv[1]);
-               else
-                       printf ("Info level 1 returned no information\n");
-       }
-       else
-       {
-               if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)
-               {
-                       fprintf (stderr, "Unable to malloc memory for buffer!\n");
-                       exit (-1);
-               }
-               if (!GetPrinter(printer, 1, (LPBYTE)buffer1, needed, &returned))
-               {
-                       fprintf (stderr, "Error enumerating printers Info Level 1 for [%s].\nSize of buffer = %d\n",
-                                       argv[1], needed);
-               }
-
-               printf ("Printer Info Level 1:\n");
-               print_printer_info_1(buffer1);
-               printf ("\n");
-               free (buffer1);
-       }
-
-       /* INFO LEVEL 2 */
-       needed = returned = 0;
-       GetPrinter(printer, 2, (LPBYTE)buffer2, 0, &needed);
-       if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
-       {
-               if (needed != 0)
-                       fprintf (stderr, "Error GetPrinter Info Level 2 for [%s] using NULL buffer.\n", argv[1]);
-               else
-                       printf ("Info level 2 returned no information\n");
-       }
-       else
-       {
-               if ((buffer2 = (LPBYTE)malloc(needed*2)) == NULL)
-               {
-                       fprintf (stderr, "Unable to malloc memory for buffer!\n");
-                       exit (-1);
-               }
-
-               printf("Pass one\n");
-               if (!GetPrinter(printer, 2, (LPBYTE)buffer2, needed, &returned))
-               {
-                       fprintf (stderr, "Error getting printers Info Level 2 for [%s].\nSize of buffer = 0x%x [0x%x]\n",
-                                       argv[1], needed, returned);
-                       PrintLastError();
-
-                       needed *= 2;
-                       returned = 0;
-                       printf("Pass Two\n");
-                       if (!GetPrinter(printer, 2, (LPBYTE)buffer2, needed, &returned))
-                       {
-                               fprintf (stderr, "Error getting printers Info Level 2 for [%s].\nSize of buffer = 0x%x [0x%x]\n",
-                                               argv[1], needed, returned);
-                               PrintLastError();
-                       }
-               }
-
-               printf ("Printer Info Level 2:\n");
-               printf ("Returned = 0x%x\n", returned);
-               print_printer_info_2(buffer2);
-               printf ("\n");
-               free (buffer2);
-       }
-
-       /* INFO LEVEL 5 */
-       GetPrinter(printer, 5, (LPBYTE)buffer5, 0, &needed);
-       if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
-       {
-               if (needed != 0)
-                       fprintf (stderr, "Error GetPrinter Info Level 5 for [%s] using NULL buffer.\n", argv[1]);
-               else
-                       printf ("Info level 5 returned no information\n");
-       }
-       else
-       {
-               if ((buffer5 = (LPBYTE)malloc(needed)) == NULL)
-               {
-                       fprintf (stderr, "Unable to malloc memory for buffer!\n");
-                       exit (-1);
-               }
-               if (!GetPrinter(printer, 5, (LPBYTE)buffer5, needed, &needed))
-               {
-                       fprintf (stderr, "Error getting printers Info Level 5 for [%s].\nSize of buffer = %d\n",
-                                       argv[1], needed);
-               }
-
-               printf ("Printer Info Level 5:\n");
-               print_printer_info_5(buffer5);
-               printf ("\n");
-               free (buffer5);
-       }
-
-       /* INFO LEVEL 7 */
-       GetPrinter(printer, 7, (LPBYTE)buffer7, 0, &needed);
+       GetPrinter(printer, level, buffer, 0, &needed);
        if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
        {
                if (needed != 0)
-                       fprintf (stderr, "Error GetPrinter Info Level 7 for [%s] using NULL buffer.\n", argv[1]);
+                       fprintf (stderr, "Error GetPrinter Info Level %d for [%s] using NULL buffer.\n", level, argv[1]);
                else
-                       printf ("Info level 7 returned no information\n");
+                       printf ("Info level %d returned no information\n", level);
        }
        else
        {
-               if ((buffer7 = (LPBYTE)malloc(needed)) == NULL)
+               if ((buffer = malloc(needed)) == NULL)
                {
                        fprintf (stderr, "Unable to malloc memory for buffer!\n");
                        exit (-1);
                }
-               if (!GetPrinter(printer, 7, (LPBYTE)buffer7, needed, &needed))
+               if (!GetPrinter(printer, level, buffer, needed, &returned))
                {
-                       fprintf (stderr, "Error getting printers Info Level 7 for [%s].\nSize of buffer = %d\n",
-                                       argv[1], needed);
+                       fprintf (stderr, "Error enumerating printers Info Level %d for [%s].\nSize of buffer = %d\n",
+                                       level, argv[1], needed);
                }
 
-               printf ("Printer Info Level 7:\n");
-               printf ("flags = %d\n", buffer7->dwAction);
-               printf ("\n");
-               free (buffer7);
+               print_printer_info_bylevel(level, buffer, 1);
+               free (buffer);
        }
 
        /* close the printer */