advapi32.lib ole32.lib ws2_32.lib rpcrt4.lib
WINSPOOL_LIBS = winspool.lib
-all: AbortPrinter.exe AddForm.exe AddJob.exe AddPrinter.exe AddPrinterConnection.exe AddPrinterDriver.exe AddPrinterDriverEx.exe AddPrinterEx.exe DeleteForm.exe DeletePrinter.exe DeletePrinterConnection.exe DeletePrinterData.exe DeletePrinterDataEx.exe DeletePrinterDriver.exe DeletePrinterDriverEx.exe DeletePrinterKey.exe DocPrinter.exe EnumForms.exe EnumJobs.exe EnumMonitors.exe EnumPorts.exe EnumPrinterData.exe EnumPrinterDataEx.exe EnumPrinterDrivers.exe EnumPrinterKey.exe EnumPrinters.exe EnumPrintProcessorDatatypes.exe EnumPrintProcessors.exe GetForm.exe GetJob.exe GetPrinter.exe GetPrinterData.exe GetPrinterDataEx.exe GetPrinterDriver.exe GetPrinterDriverDirectory.exe GetPrintProcessorDirectory.exe OpenPrinter.exe PagePrinter.exe PrinterChangeNotification.exe PrinterChangeNotify.exe ResetPrinter.exe SetForm.exe SetJob.exe SetPrinter.exe SetPrinterData.exe SetPrinterDataEx.exe
+all: AbortPrinter.exe AddForm.exe AddJob.exe AddPrinter.exe AddPrinterConnection.exe AddPrinterDriver.exe AddPrinterDriverEx.exe AddPrinterEx.exe DeleteForm.exe DeletePrinter.exe DeletePrinterConnection.exe DeletePrinterData.exe DeletePrinterDataEx.exe DeletePrinterDriver.exe DeletePrinterDriverEx.exe DeletePrinterKey.exe DocPrinter.exe EnumForms.exe EnumJobs.exe EnumMonitors.exe EnumPorts.exe EnumPrinterData.exe EnumPrinterDataEx.exe EnumPrinterDrivers.exe EnumPrinterKey.exe EnumPrinters.exe EnumPrintProcessorDatatypes.exe EnumPrintProcessors.exe GetForm.exe GetJob.exe GetPrinter.exe GetPrinterData.exe GetPrinterDataEx.exe GetPrinterDriver.exe GetPrinterDriverDirectory.exe GetPrintProcessorDirectory.exe OpenPrinter.exe PagePrinter.exe PrinterChangeNotification.exe PrinterChangeNotify.exe ResetPrinter.exe SetForm.exe SetJob.exe SetPrinter.exe SetPrinterData.exe SetPrinterDataEx.exe SetPrinterDataExW.exe
.cpp.obj:
cl /c $(CFLAGS) $*.cpp
cl $(CFLAGS) /Fe$@ SetPrinterDataEx.obj printlib.obj \
/link /incremental:no /subsystem:console $(LIBS) $(WINSPOOL_LIBS)
+SetPrinterDataExW.obj: SetPrinterDataExW.c
+
+SetPrinterDataExW.exe: SetPrinterDataExW.obj printlib.obj
+ cl $(CFLAGS) /Fe$@ SetPrinterDataExW.obj printlib.obj \
+ /link /incremental:no /subsystem:console $(LIBS) $(WINSPOOL_LIBS)
--- /dev/null
+#include <windows.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int __cdecl wmain(int argc, WCHAR *argv[])
+{
+ HANDLE printer;
+ DWORD type, cbData;
+ DWORD type_ex, cbData_ex;
+ LPBYTE pData = NULL;
+ LPBYTE pData_ex = NULL;
+ DWORD i, status;
+ LPCWSTR pKeyName;
+ LPCWSTR pValueName;
+ PRINTER_DEFAULTSW defaults;
+ LPCSTR str = "abcdefghijklmnopqrstuvwxzy";
+ DWORD s;
+
+ if (argc < 3) {
+ fprintf(stderr, "usage: %s <printername> <keyname> <valuename>\n", argv[0]);
+ exit(-1);
+ }
+
+ defaults.pDatatype = NULL;
+ defaults.pDevMode = NULL;
+ defaults.DesiredAccess = PRINTER_ACCESS_ADMINISTER;
+
+ if (!OpenPrinterW(argv[1], &printer, &defaults)) {
+ exit(-1);
+ }
+
+ printf ("Printer [%s] opened successfully.\n\n", argv[1]);
+
+ pKeyName = argv[2];
+ pValueName = argv[3];
+
+ type = REG_SZ;
+
+ for (s=0; s < strlen(str); s++) {
+#if 0
+ DWORD k = 0;
+
+ cbData = s * 2 + 2;
+ pData = malloc(cbData);
+ memset(pData, '\0', cbData);
+
+ for (i=0; i < cbData; i += 2) {
+ memcpy(&pData[i], &str[k], 1);
+ k++;
+ }
+#else
+ cbData = s;
+ pData = malloc(cbData);
+ memcpy(pData, str, s);
+#endif
+ printf("Testing SetPrinterDataExW with REG_SZ len: %d\n", cbData);
+#if 0
+ for (i=0; i < cbData; i++) {
+ printf("0x%02x ", pData[i]);
+ }
+ printf("\n");
+#endif
+ status = SetPrinterDataExW(printer, pKeyName, pValueName, type, pData, cbData);
+ if (status) {
+ printf("SetPrinterDataExW failed with 0x%08x\n", status);
+ ClosePrinter(printer);
+ exit(-1);
+ }
+
+ status = GetPrinterDataExW(printer, pKeyName, pValueName, &type_ex, NULL, 0, &cbData_ex);
+ if (status == ERROR_MORE_DATA) {
+ pData_ex = malloc(cbData_ex);
+ status = GetPrinterDataExW(printer, pKeyName, pValueName, &type_ex, pData_ex, cbData_ex, &cbData_ex);
+ }
+ if (status) {
+ printf("GetPrinterDataExW failed with 0x%08x\n", status);
+ ClosePrinter(printer);
+ exit(-1);
+ }
+
+ printf("did set %d of data\n", cbData);
+ for (i=0; i < cbData; i++) {
+ printf("0x%02x ", pData[i]);
+ }
+ printf("\n");
+
+ printf("received %d of data\n", cbData_ex);
+ for (i=0; i < cbData_ex; i++) {
+ printf("0x%02x ", pData_ex[i]);
+ }
+ printf("\n");
+
+ DeletePrinterDataExW(printer, pKeyName, pValueName);
+ DeletePrinterKeyW(printer, pKeyName);
+
+ free(pData);
+ pData = NULL;
+ free(pData_ex);
+ pData_ex = NULL;
+ }
+
+ if (!ClosePrinter(printer)) {
+ exit(-1);
+ }
+
+ return 0;
+}