--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ LPVOID lpMsgBuf;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+ if (strcmp(argv[1], "NULL") == 0)\r
+ {\r
+ argv[1] = NULL;\r
+ printf ("Calling AbortPrinter() on local machine\n");\r
+ }\r
+\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+\r
+ if (!AbortPrinter (printer))\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ else\r
+ {\r
+ printf ("AbortPrinter called successfully for [%s]\n", argv[1]);\r
+ }\r
+\r
+\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ PRINTER_DEFAULTS defaults;\r
+ DWORD returned, needed, i;\r
+ PFORM_INFO_1 buffer1 = NULL;\r
+\r
+ if ( argc < 3) {\r
+ fprintf (stderr, "useage: %s <localprinter> <networkprinter>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ defaults.DesiredAccess = PRINTER_ACCESS_ADMINISTER;\r
+ defaults.pDatatype = NULL;\r
+ defaults.pDevMode = NULL;\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, &defaults))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ PrintLastError();\r
+ exit (-1);\r
+ }\r
+\r
+ /* INFO LEVEL 1 */\r
+\r
+ EnumForms(printer, 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {\r
+ fprintf (stderr, "Error getting form information for [%s] using NULL buffer.\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+\r
+ if ( (buffer1 = (FORM_INFO_1*)malloc(needed)) == NULL ) {\r
+ fprintf (stderr, "Unable to malloc memory for FORM_INFO_1 buffer!\n");\r
+ exit (-1);\r
+ }\r
+\r
+ if (!EnumForms(printer, 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ /* close the printer */\r
+ if ( !ClosePrinter(printer) ) {\r
+ PrintLastError();\r
+ exit (-1);\r
+ }\r
+\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[2], &printer, &defaults))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ PrintLastError();\r
+ exit (-1);\r
+ }\r
+\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ if ( buffer1[i].Flags == FORM_PRINTER ) {\r
+ printf("Adding form \"%s\"\n", buffer1[i].pName );\r
+ if ( !AddForm( printer, 1, (LPBYTE)&buffer1[i] ) )\r
+ PrintLastError();\r
+ }\r
+ } \r
+\r
+\r
+ free (buffer1);\r
+\r
+\r
+ /* close the printer */\r
+ if ( !ClosePrinter(printer) ) {\r
+ PrintLastError();\r
+ exit (-1);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+#define START_JOB 0\r
+#define MAX_JOBS 100\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD returned, needed, i;\r
+ PJOB_INFO_1 buffer1 = NULL;\r
+ PJOB_INFO_2 buffer2 = NULL;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ /* INFO LEVEL 1 */\r
+ EnumJobs(printer, START_JOB, MAX_JOBS, 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ {\r
+ fprintf (stderr, "Error getting job information for [%s] using NULL buffer.\n", argv[2]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("No jobs returned for [%s]\n", argv[1]);\r
+ ClosePrinter (printer);\r
+ exit (0);\r
+ }\r
+ }\r
+\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for JOB_INFO_1 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumJobs(printer, START_JOB, MAX_JOBS, 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%s].\nSize of buffer = %d\n", \r
+ argv[2], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Job Info Level 1:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_job_info_1 (&buffer1[i]);\r
+ }\r
+ printf ("\n");\r
+ free (buffer1);\r
+\r
+\r
+ /* INFO LEVEL 2 */\r
+ EnumJobs(printer, START_JOB, MAX_JOBS, 2, (LPBYTE)buffer2, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ {\r
+ fprintf (stderr, "Error getting job information for [%s] using NULL buffer.\n", argv[2]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("No jobs returned for [%s]\n", argv[1]);\r
+ ClosePrinter (printer);\r
+ exit (0);\r
+ }\r
+ }\r
+\r
+ if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for JOB_INFO_2 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumJobs(printer, START_JOB, MAX_JOBS, 2, (LPBYTE)buffer2, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%s].\nSize of buffer = %d\n", \r
+ argv[2], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Job Info Level 2:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_job_info_2 (&buffer2[i]);\r
+ }\r
+ printf ("\n");\r
+ free (buffer2);\r
+\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include "printlib.h"\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ PRINTER_INFO_2 buffer;\r
+ HANDLE printer;\r
+ LPVOID lpMsgBuf;\r
+ \r
+ if (argc < 5)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername> <printername> <sharename> <port name>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ memset(&buffer, 0 , sizeof(buffer));\r
+\r
+ buffer.pServerName = strdup (argv[1]);\r
+ buffer.pPrinterName = strdup (argv[2]);\r
+ buffer.pShareName = strdup (argv[3]);\r
+ buffer.pPortName = strdup (argv[4]);\r
+ buffer.pDriverName = strdup ("Apple LaserWriter II NTX v51.8");\r
+ buffer.pPrintProcessor = strdup ("winprint");\r
+ buffer.pDatatype = strdup ("RAW");\r
+ buffer.Attributes = PRINTER_ATTRIBUTE_SHARED;\r
+ buffer.pSecurityDescriptor = NULL;\r
+\r
+\r
+ printf ("Attempting to add printer [%s] on server [%s]\n", \r
+ buffer.pPrinterName, buffer.pServerName);\r
+ printf ("\nPrinter Info 1:\n");\r
+ print_printer_info_2 (&buffer);\r
+ printf ("\n");\r
+\r
+ printer = AddPrinter (buffer.pServerName, 2, (LPBYTE)(&buffer));\r
+ if ( printer == NULL)\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] added successfully on server [%s]!\n",\r
+ buffer.pPrinterName, buffer.pServerName);\r
+ if (!ClosePrinter (printer))\r
+ fprintf (stderr, "Error closing printer handle!\n");\r
+ else\r
+ printf ("Printer handle closed successfully.\n");\r
+ }\r
+\r
+ return 0;\r
+\r
+}\r
+\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ LPVOID lpMsgBuf;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ if (!AddPrinterConnection(argv[1]))\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ else\r
+ {\r
+ printf ("Successfully established connection to [%s].\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+/* we assume the necessary driver files are already uploaded\r
+ on the server. We also only exercise The info level 3\r
+ since that is the one used by the NT Add Printer Wizard */\r
+int main (int argc, char* argv[])\r
+{\r
+ DRIVER_INFO_3 buffer3;\r
+ BYTE pDependentFiles[] = { "PSCRIPT.HLP\0PSCRPTUI.DLL\0PSCRIPT.DLL\0LWNTX518.PPD\0\0" };\r
+ LPVOID lpMsgBuf;\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* we'll use the Apple LaserWriter II NTX v51.8 driver\r
+ for simplcity */\r
+ buffer3.cVersion = 2;\r
+ buffer3.pEnvironment = strdup("Windows NT x86");\r
+ buffer3.pName = strdup("Apple LaserWriter II NTX v51.8");\r
+ buffer3.pDriverPath = strdup("pscript.dll");\r
+ buffer3.pDataFile = strdup("lwntx518.ppd");\r
+ buffer3.pConfigFile = strdup("pscriptui.dll");\r
+ buffer3.pDependentFiles = pDependentFiles;\r
+ buffer3.pHelpFile = strdup("pscript.hlp");\r
+ buffer3.pMonitorName = NULL;\r
+ buffer3.pDefaultDataType = strdup("RAW");\r
+\r
+ printf ("Attempting to add Driver Info Level 3 :\n");\r
+ print_driver_info_3 (&buffer3);\r
+ printf ("\n");\r
+\r
+\r
+ if (!AddPrinterDriver(argv[1], 3, (LPBYTE)&buffer3))\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer Driver installed successfully\n");\r
+ }\r
+\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+/* we assume the necessary driver files are already uploaded\r
+ on the server. We also only exercise The info level 6\r
+ since that is the one used by the Win2k Add Printer Wizard */\r
+int main (int argc, char* argv[])\r
+{\r
+ DRIVER_INFO_6 buffer;\r
+ BYTE pDependentFiles[] = { "PSCRIPT.HLP\0PSCRPTUI.DLL\0PSCRIPT.DLL\0LWNTX518.PPD\0\0" };\r
+ LPVOID lpMsgBuf;\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* we'll use the Apple LaserWriter II NTX v51.8 driver\r
+ for simplcity */\r
+ memset( &buffer, 0, sizeof(DRIVER_INFO_6) );\r
+\r
+ buffer.cVersion = 0;\r
+ buffer.pEnvironment = strdup("Windows NT x86");\r
+ buffer.pName = strdup("Apple LaserWriter II NTX v51.8");\r
+ buffer.pDriverPath = strdup("pscript.dll");\r
+ buffer.pDataFile = strdup("lwntx518.ppd");\r
+ buffer.pConfigFile = strdup("pscriptui.dll");\r
+ buffer.pDependentFiles = pDependentFiles;\r
+ buffer.pHelpFile = strdup("pscript.hlp");\r
+ buffer.pDefaultDataType = strdup("RAW");\r
+\r
+ printf ("Attempting to add Driver Info Level 6 :\n");\r
+ print_driver_info_6 (&buffer);\r
+ printf ("\n");\r
+\r
+\r
+ if (!AddPrinterDriverEx(argv[1], 6, (LPBYTE)&buffer, APD_COPY_ALL_FILES))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer Driver installed successfully\n");\r
+\r
+ if (!AddPrinterDriver(argv[1], 6, (LPBYTE)&buffer))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer Driver installed successfully\n");\r
+\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include "printlib.h"\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ PRINTER_INFO_2 buffer;\r
+ HANDLE printer;\r
+ LPVOID lpMsgBuf;\r
+ \r
+ if (argc < 5)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername> <printername> <sharename> <port name>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ memset(&buffer, 0 , sizeof(buffer));\r
+\r
+ buffer.pServerName = strdup (argv[1]);\r
+ buffer.pPrinterName = strdup (argv[2]);\r
+ buffer.pShareName = strdup (argv[3]);\r
+ buffer.pPortName = strdup (argv[4]);\r
+ buffer.pDriverName = strdup ("Apple LaserWriter II NTX v51.8");\r
+ buffer.pPrintProcessor = strdup ("winprint");\r
+ buffer.pDatatype = strdup ("RAW");\r
+ buffer.Attributes = PRINTER_ATTRIBUTE_SHARED;\r
+ buffer.pSecurityDescriptor = NULL;\r
+\r
+\r
+ printf ("Attempting to add printer [%s] on server [%s]\n", \r
+ buffer.pPrinterName, buffer.pServerName);\r
+ printf ("\nPrinter Info 1:\n");\r
+ print_printer_info_2 (&buffer);\r
+ printf ("\n");\r
+\r
+ printer = AddPrinter (buffer.pServerName, 2, (LPBYTE)(&buffer));\r
+ if ( printer == NULL)\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] added successfully on server [%s]!\n",\r
+ buffer.pPrinterName, buffer.pServerName);\r
+ if (!ClosePrinter (printer))\r
+ fprintf (stderr, "Error closing printer handle!\n");\r
+ else\r
+ printf ("Printer handle closed successfully.\n");\r
+ }\r
+\r
+ return 0;\r
+\r
+}\r
+\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ LPVOID lpMsgBuf;\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <form name>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ printf ("Attempting to remove %s...\n", argv[2]);\r
+ if (!DeleteForm(printer, (LPTSTR)argv[2]))\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ else\r
+ {\r
+ printf ("Form removed successfully!\n");\r
+ }\r
+ printf ("\n");\r
+\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ LPVOID lpMsgBuf;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ if (!DeletePrinter(printer))\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] deleted successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ LPVOID lpMsgBuf;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ if (!DeletePrinterConnection(argv[1]))\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ else\r
+ {\r
+ printf ("Successfully deleted connection to [%s].\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ LPVOID lpMsgBuf;\r
+\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <data name>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ if (DeletePrinterData(printer, argv[2]) != ERROR_SUCCESS)\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer Data [%s] deleted successfully\n", argv[2]);\r
+ }\r
+\r
+\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <data name>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the server */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ PrintLastError();\r
+ else\r
+ printf ("Server [%s] opened successfully.\n\n", argv[1]);\r
+\r
+ if (DeletePrinterDataEx(printer, "DsSpool", argv[2]) != ERROR_SUCCESS)\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer Data [%s] deleted successfully\n", argv[2]);\r
+\r
+\r
+ if (!ClosePrinter(printer))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+/* we assume the necessary driver files are already uploaded\r
+ on the server. We also only exercise The info level 3\r
+ since that is the one used by the NT Add Printer Wizard */\r
+int main (int argc, char* argv[])\r
+{\r
+ LPVOID lpMsgBuf;\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername> <arch> <driver name>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+\r
+ if (!DeletePrinterDriver(argv[1], argv[2], argv[3]))\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer Driver deleted successfully\n");\r
+ }\r
+\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include "printlib.h"\r
+\r
+/* we assume the necessary driver files are already uploaded\r
+ on the server. We also only exercise The info level 3\r
+ since that is the one used by the NT Add Printer Wizard */\r
+int main (int argc, char* argv[])\r
+{\r
+ LPVOID lpMsgBuf;\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername> <arch> <driver name> <version>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+\r
+ if (!DeletePrinterDriverEx( argv[1], argv[2], argv[3], DPD_DELETE_SPECIFIC_VERSION|DPD_DELETE_UNUSED_FILES, atoi(argv[4]) ) ) \r
+ PrintLastError();\r
+ else\r
+ printf ("Printer Driver deleted successfully\n");\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include "printlib.h"\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD returned=0, \r
+ status;\r
+ LPTSTR buffer = NULL;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the server */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+\r
+\r
+ status = DeletePrinterKey(printer, "PrinterDriverData");\r
+ if (status != ERROR_SUCCESS)\r
+ PrintLastError();\r
+ else\r
+ printf ("Success!\n");\r
+\r
+\r
+ /* close the server */\r
+ if (!ClosePrinter(printer))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <string.h>\r
+#include <stdlib.h>\r
+#include "printlib.h"\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DOC_INFO_1 buffer;\r
+ LPVOID lpMsgBuf;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ buffer.pDocName = strdup("Testing StartDocPrinter");\r
+ buffer.pDatatype = strdup("RAW");\r
+ buffer.pOutputFile = NULL;\r
+\r
+ printf ("Attempting to call StartDocPrinter() using DOC_INFO_1 :\n");\r
+ print_doc_info_1 (&buffer);\r
+ printf ("\n");\r
+\r
+ if (StartDocPrinter (printer, 1, (LPBYTE)&buffer))\r
+ printf ("Document spooled sucessfully\n");\r
+ else\r
+ PrintLastError();\r
+ printf ("\n");\r
+\r
+\r
+ printf ("Attempting to call EndDocPrinter\n");\r
+ if (EndDocPrinter (printer))\r
+ printf ("Document removed from spool sucessfully\n");\r
+ else\r
+ PrintLastError();\r
+ printf ("\n");\r
+\r
+\r
+\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD returned, needed, i;\r
+ PFORM_INFO_1 buffer1 = NULL;\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ /* INFO LEVEL 1 */\r
+ EnumForms(printer, 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%s] using NULL buffer.\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for FORM_INFO_1 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumForms(printer, 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Form Info Level 1:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_form_info_1 (&buffer1[i]);\r
+ printf ("\n");\r
+ }\r
+ free (buffer1);\r
+\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+#define START_JOB 0\r
+#define MAX_JOBS 100\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD returned, needed, i;\r
+ PJOB_INFO_1 buffer1 = NULL;\r
+ PJOB_INFO_2 buffer2 = NULL;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ /* INFO LEVEL 1 */\r
+ EnumJobs(printer, START_JOB, MAX_JOBS, 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ {\r
+ fprintf (stderr, "Error getting job information for [%s] using NULL buffer.\n", argv[2]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Info Level 1 : No jobs returned for [%s]\n", argv[1]);\r
+ ClosePrinter (printer);\r
+ exit (0);\r
+ }\r
+ }\r
+\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for JOB_INFO_1 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumJobs(printer, START_JOB, MAX_JOBS, 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%s].\nSize of buffer = %d\n", \r
+ argv[2], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Job Info Level 1:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_job_info_1 (&buffer1[i]);\r
+ }\r
+ printf ("\n");\r
+ free (buffer1);\r
+\r
+\r
+ /* INFO LEVEL 2 */\r
+ EnumJobs(printer, START_JOB, MAX_JOBS, 2, (LPBYTE)buffer2, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ {\r
+ fprintf (stderr, "Error getting job information for [%s] using NULL buffer.\n", argv[2]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Info Level 2 : No jobs returned for [%s]\n", argv[1]);\r
+ ClosePrinter (printer);\r
+ exit (0);\r
+ }\r
+ }\r
+\r
+ if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for JOB_INFO_2 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumJobs(printer, START_JOB, MAX_JOBS, 2, (LPBYTE)buffer2, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%s].\nSize of buffer = %d\n", \r
+ argv[2], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Job Info Level 2:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_job_info_2 (&buffer2[i]);\r
+ }\r
+ printf ("\n");\r
+ free (buffer2);\r
+\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ DWORD returned, needed, i;\r
+ PMONITOR_INFO_1 buffer1 = NULL;\r
+ PMONITOR_INFO_2 buffer2 = NULL;\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* INFO LEVEL 1 */\r
+ needed = returned = 0;\r
+ EnumMonitors(argv[1], 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting monitor information for [%s] using NULL buffer.\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for MONITOR_INFO_1 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumMonitors(argv[1], 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting monitor information for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Monitor Info Level 1:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_monitor_info_1(&buffer1[i]);\r
+ }\r
+ free (buffer1);\r
+\r
+ /* INFO LEVEL 2 */\r
+ needed = returned = 0;\r
+ EnumMonitors(argv[1], 2, (LPBYTE)buffer2, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting monitor information for [%s] using NULL buffer.\n", argv[1], argv[2]);\r
+ exit (-1);\r
+ }\r
+\r
+ if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for MONITOR_INFO_2 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumMonitors(argv[1], 2, (LPBYTE)buffer2, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting monitor information for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Monitor Info Level 2:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_monitor_info_2(&buffer2[i]);\r
+ }\r
+ free (buffer2);\r
+\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ DWORD returned, needed, i;\r
+ PPORT_INFO_1 buffer1 = NULL;\r
+ PPORT_INFO_2 buffer2 = NULL;\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* INFO LEVEL 1 */\r
+ needed = returned = 0;\r
+ EnumPorts(argv[1], 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting port information for [%s] using NULL buffer.\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for PORT_INFO_1 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumPorts(argv[1], 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting port information for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Port Info Level 1:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ printf ("\tPort Name\t= %s\n", buffer1[i].pName);\r
+ printf ("\n");\r
+ }\r
+ free (buffer1);\r
+\r
+ /* INFO LEVEL 2 */\r
+ needed = returned = 0;\r
+ EnumPorts(argv[1], 2, (LPBYTE)buffer2, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting port information for [%s] using NULL buffer.\n", argv[1], argv[2]);\r
+ exit (-1);\r
+ }\r
+\r
+ if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for PORT_INFO_2 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumPorts(argv[1], 2, (LPBYTE)buffer2, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting port information for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Port Info Level 2:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ printf ("\tPort Name\t= %s\n", buffer2[i].pPortName);\r
+ printf ("\tMonitor Name\t= %s\n", buffer2[i].pMonitorName);\r
+ printf ("\tDescription\t= %s\n", buffer2[i].pDescription);\r
+ printf ("\tType\t\t= 0x%x\n", buffer2[i].fPortType);\r
+ printf ("\tReserved\t= %d\n", buffer2[i].Reserved);\r
+ printf ("\n");\r
+ }\r
+ free (buffer2);\r
+\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+\r
+#define NUM_ARCH 5\r
+const LPTSTR arch [NUM_ARCH] = { "Windows 4.0",\r
+ "Windows NT x86",\r
+ "Windows NT R4000",\r
+ "Windows NT PowerPC",\r
+ "Windows NT Alpha_AXP" };\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ DWORD needed, returned, j;\r
+ PDATATYPES_INFO_1 buffer1 = NULL;\r
+ \r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername> <print processor>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* INFO LEVEL 1 */\r
+ needed = returned = 0;\r
+ EnumPrintProcessorDatatypes(argv[1], argv[2], 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error EnumPrintProcessorDatetypes Info Level 1 for [%s] using NULL buffer.\n", argv[1]);\r
+ else\r
+ printf ("Info level 1 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumPrintProcessorDatatypes(argv[1], argv[2], 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error enumerating print processor Info Level 1 for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ }\r
+ printf ("Datatypes Info Level 1\n");\r
+ for (j=0; j<returned; j++)\r
+ {\r
+ printf ("\tDatatype \t= %s\n", buffer1[j].pName);\r
+ }\r
+ free (buffer1);\r
+ }\r
+\r
+\r
+\r
+ return 0;\r
+\r
+}\r
+\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+#define NUM_ARCH 5\r
+const LPTSTR arch [NUM_ARCH] = { "Windows 4.0",\r
+ "Windows NT x86",\r
+ "Windows NT R4000",\r
+ "Windows NT PowerPC",\r
+ "Windows NT Alpha_AXP" };\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ DWORD needed, returned, i, j;\r
+ PPRINTPROCESSOR_INFO_1 buffer1 = NULL;\r
+ \r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ for (i=0; i<NUM_ARCH; i++)\r
+ {\r
+ printf ("[%s]\n", arch[i]);\r
+\r
+ needed = 0;\r
+ EnumPrintProcessors(argv[1], arch[i], 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error EnumPrintProcessors Info Level 1 for [%s] using NULL buffer.\n", argv[1]);\r
+ continue;\r
+ }\r
+\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumPrintProcessors(argv[1], arch[i], 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting print processor information for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ }\r
+ printf ("Print Processor Info 1:\n");\r
+ for (j=0; j<returned; j++)\r
+ {\r
+ print_printprocessor_info_1 (&buffer1[j]);\r
+ printf ("\n");\r
+ }\r
+ free (buffer1);\r
+ }\r
+\r
+\r
+ return 0;\r
+\r
+}\r
+\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include "printlib.h"\r
+\r
+#define START_JOB 0\r
+#define MAX_JOBS 100\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD dwIndex, pcbValue, type, pcbData;\r
+ DWORD pcbMaxValue, pcbMaxData;\r
+ LPTSTR pValueName = NULL;\r
+ LPBYTE pData = NULL;\r
+ DWORD i, status;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+\r
+ dwIndex = 0;\r
+ status = ERROR_SUCCESS;\r
+\r
+ pcbMaxValue = pcbMaxData = 0;\r
+ status=EnumPrinterData(printer, dwIndex, pValueName, 0, &pcbMaxValue, &type, pData, 0, &pcbMaxData);\r
+ printf ("\tMax Size of Value = %d\n", pcbMaxValue);\r
+ printf ("\tMax Size of Data = %d\n", pcbMaxData);\r
+ printf("\n");\r
+ if (status != ERROR_SUCCESS)\r
+ {\r
+ PrintLastError();\r
+ exit (-1);\r
+ }\r
+\r
+ if ((pValueName = (LPTSTR)malloc(pcbMaxValue)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for Value Name!\n");\r
+ exit (-1);\r
+ }\r
+ if ((pData = (LPBYTE)malloc(pcbMaxData)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for Value Data!\n");\r
+ exit (-1);\r
+ }\r
+\r
+\r
+ while (status != ERROR_NO_MORE_ITEMS)\r
+ {\r
+ pcbValue = pcbData = 0;\r
+ status = EnumPrinterData(printer, dwIndex, pValueName, pcbMaxValue, &pcbValue, &type, pData, pcbMaxData, &pcbData);\r
+ PrintLastError();\r
+ if (status == ERROR_SUCCESS)\r
+ {\r
+ printf ("\tValue Name [size] = %s [%d]\n", pValueName, pcbValue);\r
+ printf ("\tType = %d\n", type);\r
+ printf ("\tData = 0x%x [%d] bytes\n", pcbData, pcbData);\r
+ i = 0;\r
+ while (i < pcbData)\r
+ {\r
+ printf ("\t0x%x", *(pData++));\r
+ if (i%4 == 3)\r
+ printf ("\n");\r
+ i++;\r
+ }\r
+ printf ("\n");\r
+ }\r
+\r
+ dwIndex++;\r
+ }\r
+ printf ("\n");\r
+\r
+#if 0\r
+ free (pValueName);\r
+ free (pData);\r
+#endif\r
+\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include "printlib.h"\r
+\r
+\r
+#define ENUM_KEY_NAME "PrinterDriverData"\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD i, status, needed, returned;\r
+ PRINTER_ENUM_VALUES *buffer = NULL;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the server */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+\r
+\r
+ needed = returned = 0;\r
+ status = EnumPrinterDataEx(printer, ENUM_KEY_NAME, (LPBYTE)buffer, 0, &needed, &returned);\r
+ if (status == ERROR_MORE_DATA)\r
+ {\r
+ if ((buffer = malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc enough space for [%d] bytes\n", needed);\r
+ exit (-1);\r
+ }\r
+\r
+ status = EnumPrinterDataEx(printer, ENUM_KEY_NAME, (LPBYTE)buffer, needed, &needed, &returned);\r
+ if (status == ERROR_SUCCESS)\r
+ {\r
+ printf ("Printer Enum Values :\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_printer_enum_values (&buffer[i]);\r
+ printf ("\n");\r
+ }\r
+ }\r
+ free (buffer);\r
+ }\r
+ else if (status != ERROR_SUCCESS)\r
+ PrintLastError();\r
+\r
+\r
+ /* close the server */\r
+ if (!ClosePrinter(printer))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+\r
+#define NUM_ARCH 5\r
+const LPTSTR arch [NUM_ARCH] = { "Windows 4.0",\r
+ "Windows NT x86",\r
+ "Windows NT R4000",\r
+ "Windows NT PowerPC",\r
+ "Windows NT Alpha_AXP" };\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ DWORD needed, returned, i, j;\r
+ PDRIVER_INFO_1 buffer1 = NULL;\r
+ PDRIVER_INFO_2 buffer2 = NULL;\r
+ PDRIVER_INFO_3 buffer3 = NULL;\r
+ \r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ for (i=0; i<NUM_ARCH; i++)\r
+ {\r
+ printf ("\n\n[%s]\n", arch[i]);\r
+\r
+ /* INFO LEVEL 1 */\r
+ needed = returned = 0;\r
+ EnumPrinterDrivers(argv[1], arch[i], 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error EnumPrinterDrivers Info Level 1 for [%s] using NULL buffer.\n", argv[1]);\r
+ else\r
+ printf ("Info level 1 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumPrinterDrivers(argv[1], arch[i], 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error enumerating printer drivers Info Level 1 for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ }\r
+\r
+ printf ("Driver Info Level 1\n");\r
+ for (j=0; j<returned; j++)\r
+ {\r
+ printf ("\tDriver Name\t= %s\n\n", buffer1[j].pName);\r
+ printf ("\n");\r
+ }\r
+ free (buffer1);\r
+ }\r
+\r
+ /* INFO LEVEL 2 */\r
+ needed = returned = 0;\r
+ EnumPrinterDrivers(argv[1], arch[i], 2, (LPBYTE)buffer2, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error EnumPrinterDrivers Info Level 2 for [%s] using NULL buffer.\n", argv[1]);\r
+ else\r
+ printf ("Info level 2 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumPrinterDrivers(argv[1], arch[i], 2, (LPBYTE)buffer2, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error enumerating printer drivers Info Level 2 for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ }\r
+\r
+ printf ("\nDriver Info Level 2\n");\r
+ for (j=0; j<returned; j++)\r
+ {\r
+ printf ("\tDriver Name\t= %s\n", buffer2[j].pName);\r
+ printf ("\tEnvironment\t= %s\n", buffer2[j].pEnvironment);\r
+ printf ("\tVersion\t\t= %d\n", buffer2[j].cVersion);\r
+ printf ("\tDriver Path\t= %s\n", buffer2[j].pDriverPath);\r
+ printf ("\tData File\t= %s\n", buffer2[j].pDataFile);\r
+ printf ("\tConfig File\t= %s\n\n", buffer2[j].pConfigFile);\r
+ printf ("\n");\r
+ }\r
+ free (buffer2);\r
+ }\r
+\r
+ /* INFO LEVEL 3 */\r
+ needed = returned = 0;\r
+ EnumPrinterDrivers(argv[1], arch[i], 3, (LPBYTE)buffer3, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error EnumPrinterDrivers Info Level 3 for [%s] using NULL buffer.\n", argv[1]);\r
+ else\r
+ printf ("Info level 3 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer3 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumPrinterDrivers(argv[1], arch[i], 3, (LPBYTE)buffer3, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error enumerating printer drivers Info Level 3 for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ }\r
+\r
+ printf ("\nDriver Info Level 3\n");\r
+ for (j=0; j<returned; j++)\r
+ {\r
+ char* ptr;\r
+\r
+ printf ("\tDriver Name\t= %s\n", buffer3[j].pName);\r
+ printf ("\tEnvironment\t= %s\n", buffer3[j].pEnvironment);\r
+ printf ("\tVersion\t\t= %d\n", buffer3[j].cVersion);\r
+ printf ("\tDriver Path\t= %s\n", buffer3[j].pDriverPath);\r
+ printf ("\tData File\t= %s\n", buffer3[j].pDataFile);\r
+ printf ("\tConfig File\t= %s\n", buffer3[j].pConfigFile);\r
+ printf ("\tHelp Path\t= %s\n", buffer3[j].pHelpFile);\r
+ printf ("\tMonitor Name\t= %s\n", buffer3[j].pMonitorName);\r
+ printf ("\tData Type\t= %s\n", buffer3[j].pDefaultDataType);\r
+ ptr = (char*)buffer3->pDependentFiles;\r
+ while (*ptr != '\0')\r
+ {\r
+ printf ("\tDependent Files\t= %s\n", ptr);\r
+ for (;*ptr != '\0'; ptr++)\r
+ /* printf ("%s\n", ptr); */\r
+ ;\r
+ ptr++;\r
+ }\r
+\r
+ printf ("\n");\r
+ }\r
+ free (buffer3);\r
+ }\r
+\r
+ }\r
+\r
+\r
+ return 0;\r
+\r
+}\r
+\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include "printlib.h"\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD returned=0, \r
+ status;\r
+ LPTSTR buffer = NULL;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the server */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+\r
+\r
+ status = EnumPrinterKey(printer, "", buffer, 0, &returned);\r
+ if (status == ERROR_MORE_DATA)\r
+ {\r
+ if ((buffer = (LPTSTR)malloc(returned)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc enough space for [%d] bytes\n", returned);\r
+ exit (-1);\r
+ }\r
+\r
+ status = EnumPrinterKey(printer, "", buffer, returned, &returned);\r
+ if (status == ERROR_SUCCESS)\r
+ {\r
+ LPTSTR p = NULL;\r
+\r
+ printf ("Enumurated Key Values : [%d]\n", returned);\r
+\r
+ p = buffer; \r
+ while (*p)\r
+ { \r
+ printf ("\t%s\n", p);\r
+ for (; *p; p=CharNext(p));\r
+ p=CharNext(p);\r
+ }\r
+\r
+ }\r
+ free (buffer);\r
+\r
+ }\r
+ else if (status != ERROR_SUCCESS)\r
+ PrintLastError();\r
+ else\r
+ printf ("No data!\n");\r
+\r
+ returned = 0;\r
+ status = EnumPrinterKey(printer, "PrinterDriverData", buffer, 0, &returned);\r
+ if (status == ERROR_MORE_DATA)\r
+ {\r
+ if ((buffer = (LPTSTR)malloc(returned)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc enough space for [%d] bytes\n", returned);\r
+ exit (-1);\r
+ }\r
+\r
+ status = EnumPrinterKey(printer, "PrinterDriverData", buffer, returned, &returned);\r
+ if (status == ERROR_SUCCESS)\r
+ {\r
+ LPTSTR p = NULL;\r
+\r
+ printf ("Enumurated Key Values : [%d]\n", returned);\r
+\r
+ p = buffer; \r
+ while (*p)\r
+ { \r
+ printf ("\t%s\n", p);\r
+ for (p = buffer; *p; p=CharNext(p));\r
+ p=CharNext(p);\r
+ }\r
+\r
+ }\r
+ free (buffer);\r
+\r
+ }\r
+ else if (status != ERROR_SUCCESS)\r
+ PrintLastError();\r
+ else\r
+ printf ("No data!\n");\r
+\r
+\r
+\r
+\r
+\r
+\r
+ /* close the server */\r
+ if (!ClosePrinter(printer))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+\r
+void TestEnumPrinters (LPTSTR servername, DWORD flags)\r
+{\r
+ DWORD needed, returned, i;\r
+ PPRINTER_INFO_1 buffer1 = NULL;\r
+ PPRINTER_INFO_2 buffer2 = NULL;\r
+ PPRINTER_INFO_4 buffer4 = NULL;\r
+ PPRINTER_INFO_5 buffer5 = NULL;\r
+\r
+ /* INFO LEVEL 1 */\r
+ needed = returned = 0;\r
+ EnumPrinters(flags, servername, 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error EnumPrinters Info Level 1 for [%s] using NULL buffer.\n", servername);\r
+ else\r
+ printf ("Info level 1 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ return;\r
+ }\r
+ if (!EnumPrinters(flags, servername, 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error enumerating printers Info Level 1 for [%s].\nSize of buffer = %d\n", \r
+ servername, needed);\r
+ }\r
+\r
+ printf ("Printer Info Level 1:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_printer_info_1 (&buffer1[i]);\r
+ printf ("\n");\r
+ }\r
+ free (buffer1);\r
+ }\r
+\r
+ /* the following flags are only valid for info level 1 */\r
+ if ((flags == PRINTER_ENUM_REMOTE) || (flags == PRINTER_ENUM_NETWORK))\r
+ return;\r
+\r
+ /* INFO LEVEL 2 */\r
+ needed = returned = 0;\r
+ EnumPrinters(flags, servername, 2, (LPBYTE)buffer2, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error EnumPrinters Info Level 2 for [%s] using NULL buffer.\n", servername);\r
+ else\r
+ printf ("Info level 2 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ return;\r
+ }\r
+ if (!EnumPrinters(flags, servername, 2, (LPBYTE)buffer2, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error enumerating printers Info Level 2 for [%s].\nSize of buffer = %d\n", \r
+ servername, needed);\r
+ }\r
+\r
+ printf ("Printer Info Level 2:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_printer_info_2 (&buffer2[i]);\r
+ printf ("\n");\r
+ }\r
+ free (buffer2);\r
+ }\r
+\r
+ /* INFO LEVEL 5 */\r
+ needed = returned = 0;\r
+ EnumPrinters(flags, servername, 5, (LPBYTE)buffer5, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error EnumPrinters Info Level 5 for [%s] using NULL buffer.\n", servername);\r
+ else\r
+ printf ("Info level 5 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer5 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ return;\r
+ }\r
+ if (!EnumPrinters(flags, servername, 5, (LPBYTE)buffer5, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error enumerating printers Info Level 5 for [%s].\nSize of buffer = %d\n", \r
+ servername, needed);\r
+ }\r
+\r
+ printf ("Printer Info Level 5:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_printer_info_5 (&buffer5[i]);\r
+ printf ("\n");\r
+ }\r
+ free (buffer5);\r
+ }\r
+\r
+}\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+#if 0\r
+ printf ("\n\nFlags = PRINTER_ENUM_NAME\n");\r
+ TestEnumPrinters (argv[1], PRINTER_ENUM_NAME);\r
+ printf ("\n");\r
+\r
+ printf ("\n\nFlags = PRINTER_ENUM_NAME | PRINTER_ENUM_SHARED\n");\r
+ TestEnumPrinters (argv[1], PRINTER_ENUM_NAME | PRINTER_ENUM_SHARED);\r
+ printf ("\n");\r
+#endif\r
+\r
+ printf ("\n\nFlags = PRINTER_ENUM_CONNECTIONS\n");\r
+ TestEnumPrinters (argv[1], PRINTER_ENUM_CONNECTIONS);\r
+ printf ("\n");\r
+\r
+ printf ("\n\nFlags = PRINTER_ENUM_NETWORK\n");\r
+ TestEnumPrinters (NULL, PRINTER_ENUM_NETWORK);\r
+ printf ("\n");\r
+\r
+ printf ("\n\nFlags = PRINTER_ENUM_REMOTE\n");\r
+ TestEnumPrinters (NULL, PRINTER_ENUM_REMOTE);\r
+ printf ("\n");\r
+\r
+\r
+ return 0;\r
+\r
+}\r
+\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD needed;\r
+ PFORM_INFO_1 buffer1 = NULL;\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <form>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ /* INFO LEVEL 1 */\r
+ GetForm(printer, argv[2], 1, (LPBYTE)buffer1, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%s] using NULL buffer.\n", argv[2]);\r
+ exit (-1);\r
+ }\r
+\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for FORM_INFO_1 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetForm(printer, argv[2], 1, (LPBYTE)buffer1, needed, &needed))\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%2].\nSize of buffer = %d\n", \r
+ argv[2], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Form Info Level 1:\n");\r
+ print_form_info_1 (buffer1);\r
+ printf ("\n");\r
+ free (buffer1);\r
+\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include "printlib.h"\r
+\r
+#define START_JOB 0\r
+#define MAX_JOBS 100\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD returned, needed, i;\r
+ PJOB_INFO_1 buffer1 = NULL;\r
+ PJOB_INFO_2 buffer2 = NULL;\r
+ DWORD dJob = 0;\r
+\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <job id>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+ dJob = atoi(argv[2]);\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ /* INFO LEVEL 1 */\r
+ EnumJobs(printer, START_JOB, MAX_JOBS, 1, (LPBYTE)buffer1, 0, &needed, &returned);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ {\r
+ fprintf (stderr, "Error getting job information for [%s] using NULL buffer.\n", argv[2]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("No jobs returned for [%s]\n", argv[1]);\r
+ ClosePrinter (printer);\r
+ exit (0);\r
+ }\r
+ }\r
+\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for JOB_INFO_1 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!EnumJobs(printer, START_JOB, MAX_JOBS, 1, (LPBYTE)buffer1, needed, &needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%s].\nSize of buffer = %d\n", \r
+ argv[2], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Job Info Level 1:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_job_info_1 (&buffer1[i]);\r
+ }\r
+ printf ("\n");\r
+ free (buffer1);\r
+\r
+\r
+ /* INFO LEVEL 2 */\r
+ GetJob(printer, dJob, 2, (LPBYTE)buffer2, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ {\r
+ fprintf (stderr, "Error getting job information for [%s] using NULL buffer.\n", argv[2]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("No jobs returned for [%s]\n", argv[1]);\r
+ ClosePrinter (printer);\r
+ exit (0);\r
+ }\r
+ }\r
+\r
+ if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for JOB_INFO_2 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetJob(printer, dJob, 2, (LPBYTE)buffer2, needed, &needed))\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%s].\nSize of buffer = %d\n", \r
+ argv[2], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Job Info Level 2:\n");\r
+ for (i=0; i<returned; i++)\r
+ {\r
+ print_job_info_2 (&buffer2[i]);\r
+ }\r
+ printf ("\n");\r
+ free (buffer2);\r
+\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+\r
+#define NUM_ARCH 5\r
+const LPTSTR arch [NUM_ARCH] = { "Windows 4.0",\r
+ "Windows NT x86",\r
+ "Windows NT R4000",\r
+ "Windows NT PowerPC",\r
+ "Windows NT Alpha_AXP" };\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ DWORD needed, i;\r
+ LPTSTR buffer1 = NULL;\r
+ \r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ for (i=0; i<NUM_ARCH; i++)\r
+ {\r
+ printf ("[%s]\n", arch[i]);\r
+\r
+ needed = 0;\r
+ GetPrintProcessorDirectory(argv[1], arch[i], 1, (LPBYTE)buffer1, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error GetPrintProcessorDirectory for [%s] using NULL buffer.\n\n", argv[1]);\r
+ continue;\r
+ }\r
+\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetPrintProcessorDirectory(argv[1], arch[i], 1, (LPBYTE)buffer1, needed, &needed))\r
+ {\r
+ fprintf (stderr, "Error getting print processor path for [%s].\nSize of buffer = %d\n\n", \r
+ argv[1], needed);\r
+ }\r
+ printf ("\tPrint Processor Path\t= %s\n", buffer1);\r
+ printf ("\n");\r
+\r
+ free (buffer1);\r
+ }\r
+\r
+\r
+ return 0;\r
+\r
+}\r
+\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ DWORD needed, returned;\r
+ HANDLE printer;\r
+ PPRINTER_INFO_1 buffer1 = NULL;\r
+ PPRINTER_INFO_2 buffer2 = NULL;\r
+ PPRINTER_INFO_5 buffer5 = NULL;\r
+ PPRINTER_INFO_7 buffer7 = NULL;\r
+ \r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+\r
+ /* INFO LEVEL 1 */\r
+ needed = returned = 0;\r
+ GetPrinter(printer, 1, (LPBYTE)buffer1, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error GetPrinter Info Level 1 for [%s] using NULL buffer.\n", argv[1]);\r
+ else\r
+ printf ("Info level 1 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetPrinter(printer, 1, (LPBYTE)buffer1, needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error enumerating printers Info Level 1 for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ }\r
+\r
+ printf ("Printer Info Level 1:\n");\r
+ print_printer_info_1(buffer1);\r
+ printf ("\n");\r
+ free (buffer1);\r
+ }\r
+\r
+ /* INFO LEVEL 2 */\r
+ needed = returned = 0;\r
+ GetPrinter(printer, 2, (LPBYTE)buffer2, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error GetPrinter Info Level 2 for [%s] using NULL buffer.\n", argv[1]);\r
+ else\r
+ printf ("Info level 2 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer2 = (LPBYTE)malloc(needed*2)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+\r
+ printf("Pass one\n");\r
+ if (!GetPrinter(printer, 2, (LPBYTE)buffer2, needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting printers Info Level 2 for [%s].\nSize of buffer = 0x%x [0x%x]\n", \r
+ argv[1], needed, returned);\r
+ PrintLastError();\r
+\r
+ needed *= 2;\r
+ returned = 0;\r
+ printf("Pass Two\n");\r
+ if (!GetPrinter(printer, 2, (LPBYTE)buffer2, needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting printers Info Level 2 for [%s].\nSize of buffer = 0x%x [0x%x]\n", \r
+ argv[1], needed, returned); \r
+ PrintLastError();\r
+ }\r
+ }\r
+\r
+ printf ("Printer Info Level 2:\n");\r
+ printf ("Returned = 0x%x\n", returned);\r
+ print_printer_info_2(buffer2);\r
+ printf ("\n");\r
+ free (buffer2);\r
+ }\r
+\r
+ /* INFO LEVEL 5 */\r
+ GetPrinter(printer, 5, (LPBYTE)buffer5, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error GetPrinter Info Level 5 for [%s] using NULL buffer.\n", argv[1]);\r
+ else\r
+ printf ("Info level 5 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer5 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetPrinter(printer, 5, (LPBYTE)buffer5, needed, &needed))\r
+ {\r
+ fprintf (stderr, "Error getting printers Info Level 5 for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ }\r
+\r
+ printf ("Printer Info Level 5:\n");\r
+ print_printer_info_5(buffer5);\r
+ printf ("\n");\r
+ free (buffer5);\r
+ }\r
+\r
+ /* INFO LEVEL 7 */\r
+ GetPrinter(printer, 7, (LPBYTE)buffer7, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error GetPrinter Info Level 7 for [%s] using NULL buffer.\n", argv[1]);\r
+ else\r
+ printf ("Info level 7 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer7 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetPrinter(printer, 7, (LPBYTE)buffer7, needed, &needed))\r
+ {\r
+ fprintf (stderr, "Error getting printers Info Level 7 for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ }\r
+\r
+ printf ("Printer Info Level 7:\n");\r
+ printf ("flags = %d\n", buffer7->dwAction);\r
+ printf ("\n");\r
+ free (buffer7);\r
+ }\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}\r
+\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include "printlib.h"\r
+\r
+#define START_JOB 0\r
+#define MAX_JOBS 100\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD type, pcbData;\r
+ LPBYTE pData = NULL;\r
+ DWORD i, status;\r
+\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <value name>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ status=GetPrinterData(printer, argv[2], &type, pData, 0, &pcbData);\r
+ if ((status != ERROR_SUCCESS) && (status != ERROR_MORE_DATA))\r
+ {\r
+ PrintLastError();\r
+ ClosePrinter (printer);\r
+ exit (-1);\r
+ }\r
+\r
+ if ((pData = (LPBYTE)malloc(pcbData)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for Value Data!\n");\r
+ exit (-1);\r
+ }\r
+ \r
+ status = GetPrinterData(printer, argv[2], &type, pData, pcbData, &pcbData);\r
+ if (status == ERROR_SUCCESS)\r
+ {\r
+ printf ("\tValue Name = %s\n", argv[2]);\r
+ printf ("\tType = %d\n", type);\r
+ printf ("\tData = 0x%x bytes\n", pcbData);\r
+ i = 0;\r
+ while (i < pcbData)\r
+ {\r
+ printf ("\t0x%x", *(pData++));\r
+ if (i%4 == 3)\r
+ printf ("\n");\r
+ i++;\r
+ }\r
+ printf ("\n");\r
+ }\r
+ \r
+ printf ("\n");\r
+\r
+\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include "printlib.h"\r
+\r
+#define START_JOB 0\r
+#define MAX_JOBS 100\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE server;\r
+ DWORD type, pcbData;\r
+ LPBYTE pData = NULL;\r
+ DWORD i, status;\r
+\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername> <value name>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the server */\r
+ if (!OpenPrinter (argv[1], &server, NULL))\r
+ PrintLastError();\r
+ else\r
+ printf ("Server [%s] opened successfully.\n\n", argv[1]);\r
+\r
+ status=GetPrinterDataEx(server, "PrinterDriverData", argv[2], &type, pData, 0, &pcbData);\r
+ if ((status != ERROR_SUCCESS) && (status != ERROR_MORE_DATA))\r
+ {\r
+ PrintLastError();\r
+ }\r
+ else\r
+ {\r
+ if ((pData = (LPBYTE)malloc(pcbData)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for Value Data!\n");\r
+ exit (-1);\r
+ }\r
+ \r
+ status = GetPrinterDataEx(server, "PrinterDriverData", argv[2], &type, pData, pcbData, &pcbData);\r
+ if (status == ERROR_SUCCESS)\r
+ {\r
+ printf ("\tValue Name = %s\n", argv[2]);\r
+ printf ("\tType = %d\n", type);\r
+ printf ("\tData = 0x%x bytes\n", pcbData);\r
+ i = 0;\r
+ while (i < pcbData)\r
+ {\r
+ printf ("\t0x%x", *(pData++));\r
+ if (i%4 == 3)\r
+ printf ("\n");\r
+ i++;\r
+ }\r
+ printf ("\n");\r
+ }\r
+ \r
+ printf ("\n");\r
+ }\r
+\r
+\r
+ /* close the server */\r
+ if (!ClosePrinter(server))\r
+ PrintLastError();\r
+ else\r
+ printf ("Server [%s] closed successfully.\n", argv[1]);\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+#define NUM_ARCH 5\r
+const LPTSTR arch [NUM_ARCH] = { "Windows 4.0",\r
+ "Windows NT x86",\r
+ "Windows NT R4000",\r
+ "Windows NT PowerPC",\r
+ "Windows NT Alpha_AXP" };\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD returned, needed, i;\r
+ PDRIVER_INFO_1 buffer1 = NULL;\r
+ PDRIVER_INFO_2 buffer2 = NULL;\r
+ PDRIVER_INFO_3 buffer3 = NULL;\r
+ PDRIVER_INFO_4 buffer4 = NULL;\r
+ PDRIVER_INFO_5 buffer5 = NULL;\r
+ PDRIVER_INFO_6 buffer6 = NULL;\r
+\r
+ /* printf ("argc = %d\n", argc);*/\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ PrintLastError();\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ for (i=0; i<NUM_ARCH; i++)\r
+ { \r
+ printf ("Environment = [%s]\n\n", arch[i]);\r
+\r
+ /* INFO LEVEL 1 */\r
+ GetPrinterDriver(printer, arch[i], 1, (LPBYTE)buffer1, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting printer driver information for [%s] using NULL buffer.\n", argv[1]);\r
+ PrintLastError();\r
+ continue;\r
+\r
+ }\r
+\r
+ if ((buffer1 = (LPBYTE)malloc(needed*1024)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for DRIVER_INFO_1 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ needed *= 1024;\r
+ if (!GetPrinterDriver(printer, arch[i], 1, (LPBYTE)buffer1, needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting printer driver information for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ PrintLastError();\r
+ continue;\r
+ }\r
+\r
+ printf ("Printer Driver Info Level 1:\n");\r
+ print_driver_info_1 (buffer1);\r
+ free (buffer1);\r
+\r
+ /* INFO LEVEL 2 */\r
+ GetPrinterDriver(printer, arch[i], 2, (LPBYTE)buffer2, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting printer driver information for [%s] using NULL buffer.\n", argv[1]);\r
+ PrintLastError();\r
+ continue;\r
+ }\r
+\r
+ if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for DRIVER_INFO_2 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetPrinterDriver(printer, arch[i], 2, (LPBYTE)buffer2, needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting printer driver information for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ PrintLastError();\r
+ continue;\r
+ }\r
+\r
+ printf ("Printer Driver Info Level 2:\n");\r
+ print_driver_info_2 (buffer2);\r
+ free (buffer2);\r
+\r
+\r
+ /* INFO LEVEL 3 */\r
+ GetPrinterDriver(printer, arch[i], 3, (LPBYTE)buffer3, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting printer driver information for [%s] using NULL buffer.\n", argv[1]);\r
+ PrintLastError();\r
+ continue;\r
+ }\r
+\r
+ if ((buffer3 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for DRIVER_INFO_3 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetPrinterDriver(printer, arch[i], 3, (LPBYTE)buffer3, needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting printer driver information for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ PrintLastError();\r
+ continue;\r
+ }\r
+\r
+ printf ("Printer Driver Info Level 3:\n");\r
+ print_driver_info_3 (buffer3);\r
+ printf ("\n");\r
+ free (buffer3);\r
+\r
+ /* INFO LEVEL 6 */\r
+ GetPrinterDriver(printer, arch[i], 6, (LPBYTE)buffer6, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting printer driver information for [%s] using NULL buffer.\n", argv[1]);\r
+ PrintLastError();\r
+ continue;\r
+ }\r
+\r
+ if ((buffer6 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for DRIVER_INFO_6 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetPrinterDriver(printer, arch[i], 6, (LPBYTE)buffer6, needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting printer driver information for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ PrintLastError();\r
+ continue;\r
+ }\r
+\r
+ printf ("Printer Driver Info Level 6:\n");\r
+ print_driver_info_6 (buffer6);\r
+ printf ("\n");\r
+ free (buffer6);\r
+\r
+ }\r
+\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ PrintLastError();\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+\r
+#define NUM_ARCH 5\r
+const LPTSTR arch [NUM_ARCH] = { "Windows 4.0",\r
+ "Windows NT x86",\r
+ "Windows NT R4000",\r
+ "Windows NT PowerPC",\r
+ "Windows NT Alpha_AXP" };\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ DWORD returned, needed, i;\r
+ LPTSTR buffer = NULL;\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <servername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Printer Driver Directory Info Level 1:\n");\r
+ for (i=0; i<NUM_ARCH; i++)\r
+ {\r
+ GetPrinterDriverDirectory(argv[1], arch[i], 1, (LPBYTE)buffer, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting printer driver directory for [%s] using NULL buffer.\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+\r
+ if ((buffer = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for directory path!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetPrinterDriverDirectory(argv[1], arch[i], 1, (LPBYTE)buffer, needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting printer driver directory for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("\t%s Path\t= %s\n\n", arch[i], buffer);\r
+ free (buffer);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ PrintLastError();\r
+ exit (-1);\r
+ }\r
+ else\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+\r
+ if (!ClosePrinter(printer))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <fcntl.h>\r
+#include <io.h>\r
+#include <string.h>\r
+#include "printlib.h"\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ int fd;\r
+ BYTE buffer[256];\r
+ DWORD bytes, wrote;\r
+ DOC_INFO_1 buffer1;\r
+ PRINTER_DEFAULTS print_defaults;\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <filename>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("This test program exercises the following win32 functions:\n");\r
+ printf ("\tResetPrinter()\n");\r
+ printf ("\tStartDocPrinter()\n");\r
+ printf ("\tEndDocPrinter()\n");\r
+ printf ("\tStartPagePrinter()\n");\r
+ printf ("\tEndPagePrinter()\n");\r
+ printf ("\tWritePrinter()\n");\r
+ printf ("\n\n");\r
+\r
+ printf ("This test program exercises both the StartPagePrinter()\n");\r
+ printf ("and EndPagePrinter() Win32 functions.\n\n");\r
+\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ /* set the printer defaults */\r
+ print_defaults.pDatatype = strdup ("RAW");\r
+ print_defaults.DesiredAccess = NULL;\r
+ print_defaults.pDevMode = NULL;\r
+ if (ResetPrinter(printer, &print_defaults))\r
+ printf ("ResetPrinter call succeeded\n");\r
+ else\r
+ PrintLastError();\r
+ printf ("\n");\r
+\r
+ /* StartDocPrinter */\r
+ buffer1.pDocName = strdup("Testing Printer");\r
+ buffer1.pDatatype = strdup("RAW");\r
+ buffer1.pOutputFile = NULL;\r
+\r
+ printf ("Attempting to call StartDocPrinter() using DOC_INFO_1 :\n");\r
+ print_doc_info_1 (&buffer1);\r
+ printf ("\n");\r
+\r
+ if (StartDocPrinter (printer, 1, (LPBYTE)&buffer1))\r
+ printf ("StartDocPrinter called successfully\n");\r
+ else\r
+ PrintLastError();\r
+ printf ("\n");\r
+\r
+\r
+ if (StartPagePrinter(printer))\r
+ {\r
+ printf ("StartPagePrinter returned success.\n");\r
+\r
+ if ((fd=_open(argv[2], _O_RDONLY)) == -1)\r
+ {\r
+ fprintf (stderr, "ERROR: Unable to open [%s] for read access!\n", argv[2]);\r
+ ClosePrinter (printer);\r
+ exit (-1);\r
+ }\r
+\r
+ while ((bytes=_read(fd, buffer, 256)) != 0)\r
+ {\r
+ if (!WritePrinter(printer, (LPVOID)buffer, bytes, &wrote))\r
+ {\r
+ fprintf (stderr, "ERROR: WritePrinter failed for [%d] bytes!\n", bytes);\r
+ PrintLastError();\r
+ }\r
+ else\r
+ printf ("Successfully wrote [%d] bytes to the printer\n", bytes);\r
+ }\r
+ _close (fd);\r
+\r
+ if (EndPagePrinter (printer))\r
+ printf ("EndPagePrinter returned success.\n");\r
+ else\r
+ PrintLastError();\r
+ }\r
+ else\r
+ PrintLastError();\r
+ printf ("\n");\r
+ \r
+ printf ("Attempting to call EndDocPrinter\n");\r
+ if (EndDocPrinter (printer))\r
+ printf ("EndDocPrinter called successfully\n");\r
+ else\r
+ PrintLastError();\r
+ printf ("\n");\r
+\r
+\r
+\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+void PrintNotifyInfoData(PRINTER_NOTIFY_INFO_DATA *p)\r
+{\r
+ printf("\tType\t=0x%x\n", p->Type);\r
+ printf("\tField\t=0x%x\n", p->Field);\r
+ printf("\tId\t=0x%x\n", p->Id);\r
+ printf("\tdata\t= %s\n", p->NotifyData.Data.pBuf);\r
+\r
+ return;\r
+\r
+}\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE server, change;\r
+ PRINTER_NOTIFY_INFO *change_info = NULL;\r
+ PRINTER_NOTIFY_OPTIONS watch, *pWatch = NULL;\r
+ PRINTER_NOTIFY_OPTIONS_TYPE data;\r
+ DWORD option = PRINTER_CHANGE_PRINTER_DRIVER;\r
+ BOOL use_notify_options = TRUE;\r
+ DWORD condition;\r
+ DWORD flags = PRINTER_NOTIFY_OPTIONS_REFRESH;\r
+\r
+\r
+\r
+ if ((argc < 3) || (strcmp(argv[1], "-l") && strcmp(argv[1], "-t")))\r
+ {\r
+ fprintf (stderr, "usage: -l|-t %s <servername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ if (strcmp(argv[1], "-l") == 0)\r
+ use_notify_options = FALSE;\r
+\r
+\r
+ if (!OpenPrinter (argv[2], &server, NULL))\r
+ {\r
+ PrintLastError();\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[2]);\r
+ }\r
+\r
+ printf ("flags = PRINTER_CHANGE_PRINTER\n");\r
+ watch.Version = 2;\r
+ watch.Count = 1;\r
+ watch.pTypes = &data;\r
+ data.Type = PRINTER_NOTIFY_TYPE;\r
+ data.Count = 1;\r
+ data.pFields = &option;\r
+\r
+ if (use_notify_options) {\r
+ pWatch = &watch;\r
+ option = PRINTER_NOTIFY_FIELD_DRIVER_NAME;\r
+ }\r
+\r
+ if ((change=FindFirstPrinterChangeNotification(server, option, 0, pWatch)) == INVALID_HANDLE_VALUE)\r
+ {\r
+ printf ("FindFirstPrinterChangeNotification failed : ");\r
+ PrintLastError();\r
+ ClosePrinter(server);\r
+ exit (-1);\r
+ }\r
+ else\r
+ printf ("FindFirstPrinterChangeNotification succeeded with flags [PRINTER_CHANGE_PRINTER_DRIVER]\n\n");\r
+\r
+ if (pWatch) {\r
+ printf ("Calling FindNextPrinterCangeNotification() with PRINTER_NOTIFY_OPTIONS_REFRESH\n");\r
+ memset(&watch, 0x0, sizeof(watch));\r
+ watch.Flags = PRINTER_NOTIFY_OPTIONS_REFRESH;\r
+ watch.Version = 2;\r
+ if (FindNextPrinterChangeNotification(change, &condition, pWatch, &change_info))\r
+ printf ("Received change notification of [0x%x]\n", condition);\r
+ else\r
+ PrintLastError();\r
+\r
+ if (change_info) {\r
+ int i;\r
+\r
+ printf("\tVersion\t=0x%x\n", change_info->Version);\r
+ printf("\tFlags\t=0x%x\n", change_info->Flags);\r
+ printf("\tCount\t=%d\n", change_info->Count);\r
+\r
+ for (i=0; i<(int)change_info->Count; i++) {\r
+ PrintNotifyInfoData(&change_info->aData[i]);\r
+ printf("\n");\r
+ }\r
+ }\r
+\r
+ FreePrinterNotifyInfo(change_info);\r
+ printf ("\n");\r
+ }\r
+\r
+ do \r
+ {\r
+\r
+ printf ("Waiting for Printer Change Notification...\n");\r
+\r
+ if (WaitForSingleObject(change, INFINITE) != WAIT_OBJECT_0)\r
+ continue;\r
+\r
+ if (FindNextPrinterChangeNotification(change, &condition, NULL, &change_info))\r
+ printf ("Received change notification of [0x%x]\n", condition);\r
+ else\r
+ PrintLastError();\r
+\r
+ if (change_info) {\r
+ int i;\r
+\r
+ printf("\tVersion\t=0x%x\n", change_info->Version);\r
+ printf("\tFlags\t=0x%x\n", change_info->Flags);\r
+ printf("\tCount\t=%d\n", change_info->Count);\r
+\r
+ for (i=0; i<(int)change_info->Count; i++) {\r
+ PrintNotifyInfoData(&change_info->aData[i]);\r
+ printf("\n");\r
+ }\r
+ }\r
+\r
+ FreePrinterNotifyInfo(change_info);\r
+ printf ("\n");\r
+ } while (1);\r
+ \r
+\r
+ if (FindClosePrinterChangeNotification(change))\r
+ printf ("FindClosePrinterChangeNotification call succeeded.\n");\r
+ else\r
+ {\r
+ printf ("FindClosePrinterChangeNotification failed : ");\r
+ PrintLastError();\r
+ }\r
+ printf ("\n");\r
+\r
+ if (!ClosePrinter(server))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] closed successfully.\n", argv[2]);\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ PrintLastError();\r
+ exit (-1);\r
+ }\r
+ else\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+\r
+ if (!ClosePrinter(printer))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ PRINTER_DEFAULTS defaults;\r
+ PPRINTER_INFO_2 buffer2 = NULL;\r
+ DWORD needed, returned;\r
+\r
+ memset(&defaults, 0x0, sizeof(PRINTER_DEFAULTS));\r
+ defaults.pDatatype = strdup("RAW");\r
+\r
+ if (argc < 2)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ PrintLastError();\r
+ exit (-1);\r
+ }\r
+ else\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+\r
+ /* INFO LEVEL 2 */\r
+ needed = returned = 0;\r
+ GetPrinter(printer, 2, (LPBYTE)buffer2, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error GetPrinter Info Level 2 for [%s] using NULL buffer.\n", argv[1]);\r
+ else\r
+ printf ("Info level 2 returned no information\n");\r
+\r
+ goto done;\r
+ }\r
+\r
+ if ((buffer2 = (LPBYTE)malloc(needed*2)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+\r
+ if (!GetPrinter(printer, 2, (LPBYTE)buffer2, needed, &returned))\r
+ {\r
+ fprintf (stderr, "Error getting printers Info Level 2 for [%s].\nSize of buffer = 0x%x [0x%x]\n", \r
+ argv[1], needed, returned);\r
+ PrintLastError();\r
+ }\r
+\r
+ \r
+\r
+ defaults.pDevMode = buffer2->pDevMode;\r
+ if (!ResetPrinter(printer, &defaults))\r
+ PrintLastError();\r
+\r
+done:\r
+ if (!ClosePrinter(printer))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD needed;\r
+ PFORM_INFO_1 buffer1 = NULL;\r
+ LPVOID lpMsgBuf;\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <form>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ /* INFO LEVEL 1 */\r
+ GetForm(printer, argv[2], 1, (LPBYTE)buffer1, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%s] using NULL buffer.\n", argv[2]);\r
+ exit (-1);\r
+ }\r
+\r
+ if ((buffer1 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for FORM_INFO_1 buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetForm(printer, argv[2], 1, (LPBYTE)buffer1, needed, &needed))\r
+ {\r
+ fprintf (stderr, "Error getting form information for [%2].\nSize of buffer = %d\n", \r
+ argv[2], needed);\r
+ exit (-1);\r
+ }\r
+\r
+ printf ("Form Info Level 1:\n");\r
+ print_form_info_1 (buffer1);\r
+ printf ("\n");\r
+\r
+ buffer1->Size.cx *= 2;\r
+ buffer1->Size.cy *= 3;\r
+\r
+ if (SetForm(printer, argv[2], 1, (LPBYTE)buffer1))\r
+ {\r
+ printf ("Form [%s] updated successfully. Size(2x X 3y)\n", argv[2]);\r
+ }\r
+ else\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ printf ("\n");\r
+\r
+\r
+ free (buffer1);\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}
\ No newline at end of file
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD dwJobId = 0;\r
+ DOCINFO docinfo;\r
+ LPVOID lpMsgBuf;\r
+\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <Job ID>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+#if 0\r
+ docinfo.lpszDocName = strdup (argv[2]);\r
+ docinfo.lpszOutput = NULL;\r
+ docinfo.lpszDatatype = strdup ("RAW");\r
+ docinfo.fwType = 0;\r
+ docinfo.cbSize = sizeof (docinfo);\r
+\r
+ dwJobId = StartDoc (NULL, &docinfo);\r
+ printf ("JobId = %d\n", dwJobId);\r
+ if (dwJobId < 1)\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ else\r
+ {\r
+ printf ("StartDoc called successfully. Job ID = %d\n", dwJobId);\r
+ }\r
+#endif\r
+\r
+ dwJobId = atoi (argv[2]);\r
+\r
+ printf ("command = JOB_CONTROL_PAUSE\n");\r
+ if (SetJob(printer, dwJobId, 0, NULL, JOB_CONTROL_PAUSE))\r
+ {\r
+ printf ("Job Id [%d] paused successfully\n", dwJobId);\r
+ }\r
+ else\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ printf ("\n");\r
+\r
+ printf ("command = JOB_CONTROL_RESUME\n");\r
+ if (SetJob(printer, dwJobId, 0, NULL, JOB_CONTROL_RESUME))\r
+ {\r
+ printf ("Job Id [%d] resumed successfully\n", dwJobId);\r
+ }\r
+ else\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ printf ("\n");\r
+\r
+ printf ("command = JOB_CONTROL_RESTART\n");\r
+ if (SetJob(printer, dwJobId, 0, NULL, JOB_CONTROL_RESTART))\r
+ {\r
+ printf ("Job Id [%d] restarted successfully\n", dwJobId);\r
+ }\r
+ else\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ printf ("\n");\r
+\r
+\r
+ printf ("command = JOB_CONTROL_DELETE\n");\r
+ if (SetJob(printer, dwJobId, 0, NULL, JOB_CONTROL_DELETE))\r
+ {\r
+ printf ("Job Id [%d] deleted successfully\n", dwJobId);\r
+ }\r
+ else\r
+ {\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR : %s\n", (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+ }\r
+ printf ("\n");\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+/* we will excercise info level 2 (cange the drivername)\r
+ and info level 3 (security descriptor) */\r
+int main (int argc, char* argv[])\r
+{\r
+ DWORD needed;\r
+ HANDLE printer;\r
+ PPRINTER_INFO_2 buffer2 = NULL;\r
+ PRINTER_INFO_3 buffer3;\r
+ \r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <drivername>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ /* INFO LEVEL 2 */\r
+ GetPrinter(printer, 2, (LPBYTE)buffer2, 0, &needed);\r
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)\r
+ {\r
+ if (needed != 0)\r
+ fprintf (stderr, "Error GetPrinter Info Level 2 for [%s] using NULL buffer.\n", argv[1]);\r
+ else\r
+ printf ("Info level 2 returned no information\n");\r
+ }\r
+ else\r
+ {\r
+ if ((buffer2 = (LPBYTE)malloc(needed)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for buffer!\n");\r
+ exit (-1);\r
+ }\r
+ if (!GetPrinter(printer, 2, (LPBYTE)buffer2, needed, &needed))\r
+ {\r
+ fprintf (stderr, "Error getting printers Info Level 2 for [%s].\nSize of buffer = %d\n", \r
+ argv[1], needed);\r
+ }\r
+\r
+ printf ("Printer Info Level 2:\n");\r
+ print_printer_info_2(buffer2);\r
+ printf ("\n");\r
+ }\r
+\r
+ /* set the new drivername */\r
+ buffer2->pDriverName = strdup (argv[2]);\r
+ if (SetPrinter(printer, 2, (LPBYTE)buffer2, 0))\r
+ {\r
+ printf ("Printer driver successfully changed to [%s]\n", argv[2]);\r
+ printf ("Printer Info 2 :\n");\r
+ print_printer_info_2 (buffer2);\r
+ printf ("\n");\r
+ }\r
+ else\r
+ PrintLastError();\r
+\r
+ /* exercise the various command options */\r
+ printf ("command = PRINTER_CONTROL_PAUSE\n");\r
+ if (SetPrinter (printer, 2, (LPBYTE)buffer2, PRINTER_CONTROL_PAUSE))\r
+ printf ("Printer successfully paused.\n");\r
+ else\r
+ PrintLastError();\r
+ printf ("\n");\r
+\r
+ printf ("command = PRINTER_CONTROL_RESUME\n");\r
+ if (SetPrinter (printer, 2, (LPBYTE)buffer2, PRINTER_CONTROL_RESUME))\r
+ printf ("Printer successfully paused.\n");\r
+ else\r
+ PrintLastError();\r
+ printf ("\n");\r
+\r
+ printf ("command = PRINTER_CONTROL_PURGE\n");\r
+ if (SetPrinter (printer, 2, (LPBYTE)buffer2, PRINTER_CONTROL_PURGE))\r
+ printf ("Printer successfully paused.\n");\r
+ else\r
+ PrintLastError();\r
+ printf ("\n");\r
+\r
+\r
+ /* we'll just use the security descriptor from the buffer2 */\r
+ printf ("Testing setting of security descriptor using PRINTER_INFO_3...\n");\r
+ buffer3.pSecurityDescriptor = buffer2->pSecurityDescriptor;\r
+\r
+ printf ("Current security descriptor settings for [%s]:\n", argv[1]);\r
+ /* print_secdesc (buffer3.pSecurityDescriptor); */\r
+ printf ("\n");\r
+\r
+ printf ("no changes to security descriptor...\n\n");\r
+\r
+\r
+ if (SetPrinter (printer, 3, (LPBYTE)&buffer3, 0))\r
+ {\r
+ printf ("Printer descriptor information updated successfully.\n");\r
+ printf ("New security descriptor settings for [%s]:\n", argv[1]);\r
+ /* print_secdesc (buffer3.pSecurityDescriptor); */\r
+ printf ("\n");\r
+ }\r
+ else\r
+ PrintLastError();\r
+ printf ("\n");\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}\r
+\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include "printlib.h"\r
+\r
+#define START_JOB 0\r
+#define MAX_JOBS 100\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD type, pcbData;\r
+ LPBYTE pData = NULL;\r
+ DWORD i, status;\r
+\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <value name>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the printer */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ {\r
+ fprintf (stderr, "Unable to open %s!\n", argv[1]);\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+ }\r
+\r
+ status=GetPrinterData(printer, argv[2], &type, pData, 0, &pcbData);\r
+ if ((status != ERROR_SUCCESS) && (status != ERROR_MORE_DATA))\r
+ {\r
+ PrintLastError();\r
+ ClosePrinter (printer);\r
+ exit (-1);\r
+ }\r
+\r
+ if ((pData = (LPBYTE)malloc(pcbData)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for Value Data!\n");\r
+ exit (-1);\r
+ }\r
+ \r
+ status = GetPrinterData(printer, argv[2], &type, pData, pcbData, &pcbData);\r
+ if (status == ERROR_SUCCESS)\r
+ {\r
+ LPBYTE ptr = pData;\r
+\r
+ printf ("\tValue Name = %s\n", argv[2]);\r
+ printf ("\tType = %d\n", type);\r
+ printf ("\tData = 0x%x bytes\n", pcbData);\r
+ i = 0;\r
+ while (i < pcbData)\r
+ {\r
+ printf ("\t0x%x", *(ptr));\r
+ *ptr = *ptr < 1;\r
+ ptr++;\r
+ if (i%4 == 3)\r
+ printf ("\n");\r
+ i++;\r
+ }\r
+ printf ("\n");\r
+ }\r
+\r
+ printf ("Shifting everything to the right one bit...\n\n");\r
+\r
+ status = SetPrinterData(printer, argv[2], type, pData, pcbData);\r
+ if (status == ERROR_SUCCESS)\r
+ {\r
+ printf ("\tValue Name = %s\n", argv[2]);\r
+ printf ("\tType = %d\n", type);\r
+ printf ("\tData = 0x%x bytes\n", pcbData);\r
+ i = 0;\r
+ while (i < pcbData)\r
+ {\r
+ printf ("\t0x%x", *(pData++));\r
+ if (i%4 == 3)\r
+ printf ("\n");\r
+ i++;\r
+ }\r
+ printf ("\n");\r
+ }\r
+ else\r
+ PrintLastError();\r
+ \r
+ printf ("\n");\r
+\r
+\r
+\r
+ /* close the printer */\r
+ if (!ClosePrinter(printer))\r
+ {\r
+ fprintf (stderr, "Error closing printer!\n");\r
+ exit (-1);\r
+ }\r
+ else\r
+ {\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+ }\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+/******************************************************************\r
+ * SPOOLSS regression testing code for Samba print servers\r
+ * \r
+ *****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include "printlib.h"\r
+\r
+int main (int argc, char* argv[])\r
+{\r
+ \r
+ HANDLE printer;\r
+ DWORD type, pcbData;\r
+ LPBYTE pData = NULL;\r
+ DWORD i, status;\r
+\r
+\r
+ if (argc < 3)\r
+ {\r
+ fprintf (stderr, "useage: %s <printername> <value name>\n", argv[0]);\r
+ exit (-1);\r
+ }\r
+\r
+ /* open the server */\r
+ if (!OpenPrinter (argv[1], &printer, NULL))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);\r
+\r
+\r
+ status=GetPrinterDataEx(printer, "PrinterDriverData", argv[2], &type, pData, 0, &pcbData);\r
+ if ((status != ERROR_SUCCESS) && (status != ERROR_MORE_DATA))\r
+ {\r
+ PrintLastError();\r
+ ClosePrinter (printer);\r
+ exit (-1);\r
+ }\r
+\r
+ if ((pData = (LPBYTE)malloc(pcbData)) == NULL)\r
+ {\r
+ fprintf (stderr, "Unable to malloc memory for Value Data!\n");\r
+ exit (-1);\r
+ }\r
+ \r
+ status = GetPrinterDataEx(printer, "PrinterDriverData", argv[2], &type, pData, pcbData, &pcbData);\r
+ if (status == ERROR_SUCCESS)\r
+ {\r
+ LPBYTE ptr = pData;\r
+\r
+ printf ("\tValue Name = %s\n", argv[2]);\r
+ printf ("\tType = %d\n", type);\r
+ printf ("\tData = 0x%x bytes\n", pcbData);\r
+ i = 0;\r
+ while (i < pcbData)\r
+ {\r
+ printf ("\t0x%x", *(ptr));\r
+ *ptr = *ptr < 1;\r
+ ptr++;\r
+ if (i%4 == 3)\r
+ printf ("\n");\r
+ i++;\r
+ }\r
+ printf ("\n");\r
+ }\r
+\r
+ printf ("Shifting everything to the right one bit...\n\n");\r
+\r
+ status = SetPrinterDataEx(printer, "PrinterDriverData", argv[2], type, pData, pcbData);\r
+ if (status == ERROR_SUCCESS)\r
+ {\r
+ printf ("\tValue Name = %s\n", argv[2]);\r
+ printf ("\tType = %d\n", type);\r
+ printf ("\tData = 0x%x bytes\n", pcbData);\r
+ i = 0;\r
+ while (i < pcbData)\r
+ {\r
+ printf ("\t0x%x", *(pData++));\r
+ if (i%4 == 3)\r
+ printf ("\n");\r
+ i++;\r
+ }\r
+ printf ("\n");\r
+ }\r
+ else\r
+ PrintLastError();\r
+ \r
+ printf ("\n");\r
+\r
+\r
+\r
+ /* close the server */\r
+ if (!ClosePrinter(printer))\r
+ PrintLastError();\r
+ else\r
+ printf ("Printer [%s] closed successfully.\n", argv[1]);\r
+\r
+ return 0;\r
+\r
+}\r
--- /dev/null
+#include <windows.h>\r
+#include <stdio.h>\r
+#include "printlib.h"\r
+\r
+#define DetectNull(p) (p?p:"NULL")\r
+\r
+void print_devmode (DEVMODE *pDevModeIn)\r
+{\r
+ if (pDevModeIn == NULL)\r
+ {\r
+ printf ("\tDevice Mode\t= (null)\n");\r
+ return;\r
+ }\r
+\r
+ printf( "\tDEVMODE:----------\n" );\r
+ printf( "\tDeviceName: [%s]\n", DetectNull( pDevModeIn->dmDeviceName ) );\r
+ printf( "\tSpecVersion: %d\n", pDevModeIn->dmSpecVersion );\r
+ printf( "\tDriverVersion: %d\n", pDevModeIn->dmDriverVersion );\r
+ printf( "\tSize: %d\n", pDevModeIn->dmSize );\r
+ printf( "\tDriverExtra: %d\n", pDevModeIn->dmDriverExtra );\r
+ printf( "\tFields: 0x%x\n", pDevModeIn->dmFields );\r
+\r
+ if ( pDevModeIn->dmFields & DM_ORIENTATION )\r
+ printf( "\tOrientation: %d\n", pDevModeIn->dmOrientation );\r
+ if ( pDevModeIn->dmFields & DM_PAPERSIZE )\r
+ printf( "\tPaperSize: %d\n", pDevModeIn->dmPaperSize);\r
+ if ( pDevModeIn->dmFields & DM_PAPERLENGTH )\r
+ printf( "\tPaperLength: %d\n", pDevModeIn->dmPaperLength );\r
+ if ( pDevModeIn->dmFields & DM_PAPERWIDTH )\r
+ printf( "\tPaperWidth: %d\n", pDevModeIn->dmPaperWidth );\r
+// if ( pDevModeIn->dmFields & DM_POSITION )\r
+// printf( "\tPosition: %d\n", pDevModeIn->dmPosition );\r
+ if ( pDevModeIn->dmFields & DM_SCALE )\r
+ printf( "\tScale: %d\n", pDevModeIn->dmScale );\r
+ if ( pDevModeIn->dmFields & DM_COPIES )\r
+ printf( "\tCopies: %d\n", pDevModeIn->dmCopies );\r
+ if ( pDevModeIn->dmFields & DM_DEFAULTSOURCE )\r
+ printf( "\tDefaultSource: %d\n", pDevModeIn->dmDefaultSource );\r
+ if ( pDevModeIn->dmFields & DM_PRINTQUALITY )\r
+ printf( "\tPrintQuality: %d\n", pDevModeIn->dmPrintQuality );\r
+ if ( pDevModeIn->dmFields & DM_COLOR )\r
+ printf( "\tColor: %d\n", pDevModeIn->dmColor );\r
+ if ( pDevModeIn->dmFields & DM_DUPLEX )\r
+ printf( "\tDuplex: %d\n", pDevModeIn->dmDuplex );\r
+ if ( pDevModeIn->dmFields & DM_YRESOLUTION )\r
+ printf( "\tYResolution: %d\n", pDevModeIn->dmYResolution );\r
+ if ( pDevModeIn->dmFields & DM_TTOPTION )\r
+ printf( "\tTTOption: %d\n", pDevModeIn->dmTTOption );\r
+ if ( pDevModeIn->dmFields & DM_COLLATE )\r
+ printf( "\tCollate: %d\n", pDevModeIn->dmCollate );\r
+ if ( pDevModeIn->dmFields & DM_FORMNAME )\r
+ printf( "\tForm: [%s]\n", pDevModeIn->dmFormName );\r
+ if ( pDevModeIn->dmFields & DM_LOGPIXELS )\r
+ printf( "\tLogPixels: %d\n", pDevModeIn->dmLogPixels );\r
+ if ( pDevModeIn->dmFields & DM_BITSPERPEL )\r
+ printf( "\tBitsPerPel: %d\n", pDevModeIn->dmBitsPerPel );\r
+ if ( pDevModeIn->dmFields & DM_PELSWIDTH )\r
+ printf( "\tPelsWidth: %d\n", pDevModeIn->dmPelsWidth );\r
+ if ( pDevModeIn->dmFields & DM_PELSHEIGHT )\r
+ printf( "\tPelsHeight: %d\n", pDevModeIn->dmPelsHeight );\r
+ if ( pDevModeIn->dmFields & DM_DISPLAYFLAGS )\r
+ printf( "\tDisplayFlags: %d\n", pDevModeIn->dmDisplayFlags );\r
+// if ( pDevModeIn->dmFields & DM_NUP )\r
+// printf( "\tNup: %d\n", pDevModeIn->dmNup );\r
+ if ( pDevModeIn->dmFields & DM_DISPLAYFREQUENCY )\r
+ printf( "\tDisplayFrequency:%d\n", pDevModeIn->dmDisplayFrequency );\r
+ if ( pDevModeIn->dmFields & DM_ICMMETHOD )\r
+ printf( "\tICMMethod: %d\n", pDevModeIn->dmICMMethod );\r
+ if ( pDevModeIn->dmFields & DM_ICMINTENT )\r
+ printf( "\tICMIntent: %d\n", pDevModeIn->dmICMIntent );\r
+ if ( pDevModeIn->dmFields & DM_MEDIATYPE )\r
+ printf( "\tMediaType: %d\n", pDevModeIn->dmMediaType );\r
+ if ( pDevModeIn->dmFields & DM_DITHERTYPE )\r
+ printf( "\tDitherType: %d\n", pDevModeIn->dmDitherType );\r
+// if ( pDevModeIn->dmFields & DM_PANNINGWIDTH )\r
+// printf( "\tPanningWidth: %d\n", pDevModeIn->dmPanningWidth );\r
+// if ( pDevModeIn->dmFields & DM_PANNINGHEIGHT )\r
+// printf( "\tPanningHeight: %d\n", pDevModeIn->dmPanningHeight );\r
+\r
+#if 0\r
+ if ( bForceIn )\r
+ {\r
+ printf( " DEVMODE\n" );\r
+ Dump( (BYTE*)pDevModeIn, sizeof(DEVMODE), LEADER );\r
+\r
+ if ( pDevModeIn->dmDriverExtra )\r
+ {\r
+ printf( " DriverExtra\n" );\r
+ Dump( (BYTE*)pDevModeIn + sizeof(DEVMODE), pDevModeIn->dmDriverExtra, LEADER );\r
+ }\r
+ }\r
+#endif\r
+\r
+ return;\r
+}\r
+\r
+void print_acl (const char* str, ACL *acl)\r
+{\r
+ printf ("%s\n", str);\r
+ if (acl == NULL)\r
+ return;\r
+\r
+ printf ("\t\tACL Revision \t\t 0x%x\n", acl->AclRevision);\r
+ printf ("\t\tSbz1\t\t 0x%x\n", acl->Sbz1);\r
+ printf ("\t\tSbz2\t\t 0x%x\n", acl->Sbz2);\r
+ printf ("\t\tACL Size\t\t 0x%x\n", acl->AclSize);\r
+ printf ("\t\tACL Count\t\t 0x%x\n", acl->AceCount);\r
+\r
+\r
+ return;\r
+}\r
+\r
+void print_sid (const char* str, SID *sid)\r
+{\r
+ DWORD i;\r
+\r
+ printf ("%s\n", str);\r
+ printf ("0x%x\n", sid);\r
+ if (sid == NULL)\r
+ return;\r
+ printf ("\t\tRevision\t\t0x%x\n", sid->Revision);\r
+ printf ("\t\tSubAuthorityCount\t0x%x\n", sid->SubAuthorityCount);\r
+ printf ("\t\tSubAuthority\n\t");\r
+ while (i < sid->SubAuthorityCount)\r
+ {\r
+ printf ("\t0x%x", sid->SubAuthority[i]);\r
+ if (i%4 == 3)\r
+ printf ("\n\t");\r
+ i++;\r
+ }\r
+\r
+ return;\r
+}\r
+\r
+void print_secdesc (SECURITY_DESCRIPTOR *secdesc)\r
+{\r
+ if (secdesc == NULL)\r
+ {\r
+ printf ("\tSecurity Descriptor\t= (null)\n");\r
+ return;\r
+ }\r
+\r
+ printf ("\tRevision\t= 0x%x\n", secdesc->Revision);\r
+ printf ("\tSbz1\t\t= 0x%x\n", secdesc->Sbz1);\r
+#if 0\r
+ print_sid ("\tOwner\t\t= ", secdesc->Owner);\r
+ print_sid ("\tGroup\t\t= ",secdesc->Group);\r
+ print_acl ("\tSacl\t\t= ", secdesc->Sacl);\r
+ print_acl ("\tDacl\t\t= ", secdesc->Dacl);\r
+#endif\r
+ return;\r
+}\r
+\r
+void PrintLastError()\r
+{\r
+ LPVOID lpMsgBuf;\r
+ DWORD status;\r
+\r
+ status = GetLastError();\r
+\r
+ FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
+ FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
+ (LPTSTR) &lpMsgBuf, 0, NULL);\r
+ printf ("ERROR [0x%x] : %s\n", status, (char*)lpMsgBuf);\r
+ LocalFree (lpMsgBuf);\r
+\r
+ return;\r
+}\r
+\r
+\r
+void print_job_info_1(PJOB_INFO_1 info)\r
+{\r
+ printf ("\tJob ID\t\t= %d\n", info->JobId);\r
+ printf ("\tPrinter Name\t= %s\n", info->pPrinterName);\r
+ printf ("\tMachine Name\t= %s\n", info->pMachineName);\r
+ printf ("\tUser Name\t= %s\n", info->pUserName);\r
+ printf ("\tDocument\t= %s\n", info->pDocument);\r
+ printf ("\tDatatype\t= %s\n", info->pDatatype);\r
+ printf ("\tStatus\t\t= %s\n", info->pStatus);\r
+ printf ("\tStatus\t= %d\n", info->Status);\r
+ printf ("\tPriority\t= %d\n", info->Priority);\r
+ printf ("\tPosition\t= %d\n", info->Position);\r
+ printf ("\tTotal Pages\t= %d\n", info->TotalPages);\r
+ printf ("\tPages Printed\t= %d\n", info->PagesPrinted);\r
+ printf ("\tSubmitted (DD:MM:YY HH:MM:SS)\t= %d:%d:%d %d:%d:%d UTC\n",\r
+ info->Submitted.wDay, info->Submitted.wMonth,\r
+ info->Submitted.wYear, info->Submitted.wHour,\r
+ info->Submitted.wMinute, info->Submitted.wSecond);\r
+\r
+ return;\r
+}\r
+\r
+void print_job_info_2(PJOB_INFO_2 info)\r
+{\r
+ printf ("\tJob ID\t\t= %d\n", info->JobId);\r
+ printf ("\tPrinter Name\t= %s\n", info->pPrinterName);\r
+ printf ("\tMachine Name\t= %s\n", info->pMachineName);\r
+ printf ("\tUser Name\t= %s\n", info->pUserName);\r
+ printf ("\tDocument\t= %s\n", info->pDocument);\r
+ printf ("\tDatatype\t= %s\n", info->pDatatype);\r
+ printf ("\tNotify Name\t= %s\n", info->pNotifyName);\r
+ printf ("\tPrint Processor\t= %s\n", info->pPrintProcessor);\r
+ printf ("\tParameters\t= %s\n", info->pParameters);\r
+ printf ("\tDriver Name\t= %s\n", info->pDriverName);\r
+ printf ("\tStatus\t\t= %s\n", info->pStatus);\r
+ printf ("\tStatus\t\t= %d\n", info->Status);\r
+ printf ("\tPriority\t= %d\n", info->Priority);\r
+ printf ("\tPosition\t= %d\n", info->Position);\r
+ printf ("\tTotal Pages\t= %d\n", info->TotalPages);\r
+ printf ("\tPages Printed\t= %d\n", info->PagesPrinted);\r
+ printf ("\tStart Time\t= %d\n", info->StartTime);\r
+ printf ("\tUntil Time\t= %d\n", info->UntilTime);\r
+ printf ("\tTime\t\t= %d\n", info->Time);\r
+ printf ("\tSize\t\t= %d\n", info->Size);\r
+ printf ("\tSubmitted (DD:MM:YY HH:MM:SS)\t= %d:%d:%d %d:%d:%d UTC\n",\r
+ info->Submitted.wDay, info->Submitted.wMonth,\r
+ info->Submitted.wYear, info->Submitted.wHour,\r
+ info->Submitted.wMinute, info->Submitted.wSecond);\r
+ printf ("\tDevice Mode Information\n");\r
+ printf ("\t-----------------------\n");\r
+ print_devmode (info->pDevMode);\r
+ printf ("\tSecurity Descriptor Information\n");\r
+ printf ("\t-------------------------------\n");\r
+ print_secdesc (info->pSecurityDescriptor);\r
+\r
+ return;\r
+}\r
+\r
+void print_job_info_3(PJOB_INFO_3 info)\r
+{\r
+ printf ("\tJob ID\t\t= %d\n", info->JobId);\r
+ printf ("\tJob ID Next Job\t= %d\n", info->NextJobId);\r
+ printf ("\tReserved (must be 0)\t= %d\n", info->Reserved);\r
+\r
+ return;\r
+}\r
+\r
+void print_monitor_info_1 (PMONITOR_INFO_1 info)\r
+{\r
+ printf ("\tMonitor Name\t= %s\n", info->pName);\r
+\r
+ return;\r
+}\r
+\r
+void print_monitor_info_2 (PMONITOR_INFO_2 info)\r
+{\r
+ printf ("\tMonitor Name\t= %s\n", info->pName);\r
+ printf ("\tEnvironment\t= %s\n", info->pEnvironment);\r
+ printf ("\tDLL Name\t= %s\n", info->pDLLName);\r
+\r
+ return;\r
+}\r
+\r
+void print_form_info_1 (PFORM_INFO_1 info)\r
+{\r
+\r
+ printf ("\tForm Name\t= %s\n", info->pName);\r
+ printf ("\tFlags\t\t= 0x%x\n", info->Flags);\r
+ printf ("\tSize\t\t= %d x %d\n", info->Size.cx, info->Size.cy);\r
+ printf ("\tRectangle\t= [left]%d [right]%d [top]%d [bottom]%d\n", \r
+ info->ImageableArea.left, info->ImageableArea.right,\r
+ info->ImageableArea.top, info->ImageableArea.bottom);\r
+\r
+ return;\r
+}\r
+\r
+void print_printer_info_1 (PPRINTER_INFO_1 info)\r
+{\r
+ \r
+ printf ("\tPrinter Name\t= %s\n", info->pName);\r
+ printf ("\tDescription\t= %s\n", info->pDescription);\r
+ printf ("\tComment\t\t= %s\n", info->pComment);\r
+ printf ("\tFlags\t\t= 0x%x\n", info->Flags);\r
+\r
+ return;\r
+}\r
+\r
+void print_printer_info_2 (PPRINTER_INFO_2 info)\r
+{\r
+ printf ("\tServer Name\t\t= %s\n", info->pServerName);\r
+ printf ("\tPrinter Name\t\t= %s\n", info->pPrinterName);\r
+ printf ("\tPort Name\t\t= %s\n", info->pPortName);\r
+ printf ("\tShare Name\t\t= %s\n", info->pShareName);\r
+ printf ("\tDriver Name\t\t= %s\n", info->pDriverName);\r
+ printf ("\tComment\t\t\t= %s\n", info->pComment);\r
+ printf ("\tLocation\t\t= %s\n", info->pLocation);\r
+ printf ("\tSeparator File\t\t= %s\n", info->pSepFile);\r
+ printf ("\tDefault Data Type\t= %s\n", info->pDatatype);\r
+ printf ("\tPrint Processor\t\t= %s\n", info->pPrintProcessor);\r
+ printf ("\tParameters\t\t= %s\n", info->pParameters);\r
+\r
+ printf ("\tAttributes\t\t= 0x%x\n", info->Attributes);\r
+ printf ("\tPriority\t\t= 0x%x\n", info->Priority);\r
+ printf ("\tDefault Priority\t= 0x%x\n", info->DefaultPriority);\r
+ printf ("\tStart Time\t\t= 0x%x\n", info->StartTime);\r
+ printf ("\tUntil Time\t\t= 0x%x\n", info->UntilTime);\r
+ printf ("\tStatus\t\t\t= 0x%x\n", info->Status);\r
+ printf ("\tcJobs\t\t\t= 0x%x\n", info->cJobs);\r
+ printf ("\tAverage PPM\t\t= 0x%x\n", info->AveragePPM);\r
+\r
+ printf ("\tDevice Mode Information\n");\r
+ printf ("\t-----------------------\n");\r
+ print_devmode (info->pDevMode);\r
+#if 0\r
+ printf ("\tSecurity Descriptor Information\n");\r
+ printf ("\t-------------------------------\n");\r
+ print_secdesc (info->pSecurityDescriptor);\r
+#endif \r
+ return;\r
+}\r
+\r
+void print_printer_info_5 (PPRINTER_INFO_5 info)\r
+{\r
+\r
+ printf ("\tPrinter Name\t\t\t= %s\n", info->pPrinterName);\r
+ printf ("\tPort Name\t\t\t= %s\n", info->pPortName);\r
+ printf ("\tAttributes\t\t\t= 0x%x\n", info->Attributes);\r
+ printf ("\tDev NotSelect Timeout\t= 0x%x\n", info->DeviceNotSelectedTimeout);\r
+ printf ("\tTX RetryTimeout\t\t= 0x%x\n", info->TransmissionRetryTimeout);\r
+\r
+ return;\r
+\r
+}\r
+\r
+void print_printprocessor_info_1 (PPRINTPROCESSOR_INFO_1 info)\r
+{\r
+\r
+ printf ("\tPrint Processor Name\t= %s\n", info->pName);\r
+\r
+ return;\r
+}\r
+\r
+void print_driver_info_1 (PDRIVER_INFO_1 info)\r
+{\r
+ printf ("\tDriver Name\t= %s\n\n", info->pName);\r
+\r
+ return;\r
+}\r
+\r
+void print_driver_info_2 (PDRIVER_INFO_2 info)\r
+{\r
+ printf ("\tDriver Name\t= %s\n", info->pName);\r
+ printf ("\tEnvironment\t= %s\n", info->pEnvironment);\r
+ printf ("\tVersion\t\t= %d\n", info->cVersion);\r
+ printf ("\tDriver Path\t= %s\n", info->pDriverPath);\r
+ printf ("\tData File\t= %s\n", info->pDataFile);\r
+ printf ("\tConfig File\t= %s\n\n", info->pConfigFile);\r
+\r
+ return;\r
+}\r
+\r
+void print_driver_info_3 (PDRIVER_INFO_3 info)\r
+{\r
+ char *ptr = NULL;\r
+\r
+ printf ("\tDriver Name\t= %s\n", info->pName);\r
+ printf ("\tEnvironment\t= %s\n", info->pEnvironment);\r
+ printf ("\tVersion\t\t= %d\n", info->cVersion);\r
+ printf ("\tDriver Path\t= %s\n", info->pDriverPath);\r
+ printf ("\tData File\t= %s\n", info->pDataFile);\r
+ printf ("\tConfig File\t= %s\n", info->pConfigFile);\r
+ printf ("\tHelp Path\t= %s\n", info->pHelpFile);\r
+ printf ("\tMonitor Name\t= %s\n", info->pMonitorName);\r
+ printf ("\tData Type\t= %s\n", info->pDefaultDataType);\r
+ ptr = (char*)info->pDependentFiles;\r
+ while ((ptr != NULL) && (*ptr != '\0'))\r
+ {\r
+ printf ("\tDependent Files\t= %s\n", ptr);\r
+ for (;*ptr != '\0'; ptr++)\r
+ /* printf ("%s\n", ptr); */\r
+ ;\r
+ ptr++;\r
+ }\r
+\r
+ return;\r
+}\r
+\r
+void print_driver_info_4 (PDRIVER_INFO_4 info)\r
+{\r
+ char *ptr = NULL;\r
+\r
+ printf ("\tDriver Name\t= %s\n", info->pName);\r
+ printf ("\tEnvironment\t= %s\n", info->pEnvironment);\r
+ printf ("\tVersion\t\t= %d\n", info->cVersion);\r
+ printf ("\tDriver Path\t= %s\n", info->pDriverPath);\r
+ printf ("\tData File\t= %s\n", info->pDataFile);\r
+ printf ("\tConfig File\t= %s\n", info->pConfigFile);\r
+ printf ("\tHelp Path\t= %s\n", info->pHelpFile);\r
+ printf ("\tMonitor Name\t= %s\n", info->pMonitorName);\r
+ printf ("\tData Type\t= %s\n", info->pDefaultDataType);\r
+ printf ("\tPrevious Names\t= %s\n", info->pszzPreviousNames);\r
+ ptr = (char*)info->pDependentFiles;\r
+ while ((ptr != NULL) && (*ptr != '\0'))\r
+ {\r
+ printf ("\tDependent Files\t= %s\n", ptr);\r
+ for (;*ptr != '\0'; ptr++)\r
+ /* printf ("%s\n", ptr); */\r
+ ;\r
+ ptr++;\r
+ }\r
+\r
+ return;\r
+}\r
+\r
+void print_driver_info_6 (PDRIVER_INFO_6 info)\r
+{\r
+ char *ptr = NULL;\r
+\r
+ printf ("\tDriver Name\t= %s\n", info->pName);\r
+ printf ("\tEnvironment\t= %s\n", info->pEnvironment);\r
+ printf ("\tVersion\t\t= %d\n", info->cVersion);\r
+ printf ("\tDriver Path\t= %s\n", info->pDriverPath);\r
+ printf ("\tData File\t= %s\n", info->pDataFile);\r
+ printf ("\tConfig File\t= %s\n", info->pConfigFile);\r
+ printf ("\tHelp Path\t= %s\n", info->pHelpFile);\r
+ printf ("\tMonitor Name\t= %s\n", info->pMonitorName);\r
+ printf ("\tData Type\t= %s\n", info->pDefaultDataType);\r
+ printf ("\tPrevious Names\t= %s\n", info->pszzPreviousNames);\r
+ ptr = (char*)info->pDependentFiles;\r
+ if (ptr != NULL)\r
+ {\r
+ while (*ptr != '\0')\r
+ {\r
+ printf ("\tDependent Files\t= %s\n", ptr);\r
+ for (;*ptr != '\0'; ptr++)\r
+ /* printf ("%s\n", ptr); */\r
+ ;\r
+ ptr++;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ printf ("\tPrevious Names\t= (null)\n");\r
+ }\r
+\r
+\r
+ ptr = (char*)info->pszzPreviousNames;\r
+ if (ptr != NULL)\r
+ {\r
+ while (*ptr != '\0')\r
+ {\r
+ printf ("\tPrevious Names\t= %s\n", ptr);\r
+ for (;*ptr != '\0'; ptr++)\r
+ /* printf ("%s\n", ptr); */\r
+ ;\r
+ ptr++;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ printf ("\tPrevious Names\t= (null)\n");\r
+ }\r
+\r
+ printf ("\tDriver Date\t= %d\n", info->ftDriverDate);\r
+ printf ("\tDriver Version\t= %d\n", info->dwlDriverVersion);\r
+ printf ("\tManufacture Name = %s\n", info->pszMfgName);\r
+ printf ("\tOEM URL\t\t= %s\n", info->pszOEMUrl);\r
+ printf ("\tHardware ID\t= %s\n", info->pszHardwareID);\r
+ printf ("\tProvider\t= %s\n", info->pszProvider);\r
+\r
+ return;\r
+}\r
+\r
+void print_doc_info_1 (PDOC_INFO_1 info)\r
+{\r
+ printf ("\tDocument Name\t= %s\n", info->pDocName);\r
+ printf ("\tOutput Filename\t= %s\n", info->pOutputFile);\r
+ printf ("\tDatatype\t= %s\n", info->pDatatype);\r
+\r
+ return;\r
+}\r
+\r
+void print_printer_enum_values (PRINTER_ENUM_VALUES *info)\r
+{\r
+ DWORD i = 0;;\r
+\r
+ printf ("\tValue Name\t= %s [0x%x]\n", info->pValueName, info->cbValueName);\r
+ printf ("\tType\t\t= 0x%x\n", info->dwType);\r
+ printf ("\tSize\t\t= 0x%x\n", info->cbData);\r
+\r
+ while (i < info->cbData)\r
+ {\r
+ printf ("\t0x%x", *(info->pData++));\r
+ if (i%4 == 3)\r
+ printf ("\n");\r
+ i++;\r
+ }\r
+ printf ("\n");\r
+\r
+ return;\r
+}
\ No newline at end of file