Exemple #1
0
static BOOL test_GetPrinterDataEx(struct torture_context *tctx,
				  LPSTR servername,
				  LPSTR keyname,
				  LPSTR valuename,
				  HANDLE handle,
				  DWORD *type_p,
				  LPBYTE *buffer_p,
				  DWORD *size_p)
{
	LPBYTE buffer = NULL;
	DWORD needed = 0;
	DWORD type;
	DWORD err = 0;
	char tmp[1024];

	torture_comment(tctx, "Testing GetPrinterDataEx(%s - %s)", keyname, valuename);

	err = GetPrinterDataEx(handle, keyname, valuename, &type, NULL, 0, &needed);
	if (err == ERROR_MORE_DATA) {
		buffer = (LPBYTE)malloc(needed);
		torture_assert(tctx, buffer, "malloc failed");
		err = GetPrinterDataEx(handle, keyname, valuename, &type, buffer, needed, &needed);
	}
	if (err) {
		sprintf(tmp, "GetPrinterDataEx(%s) failed on [%s] (buffer size = %d), error: %s\n",
			valuename, servername, needed, errstr(err));
		torture_fail(tctx, tmp);
	}

	if (tctx->print) {
		print_printer_data(keyname, valuename, needed, buffer, type);
	}

	if (type_p) {
		*type_p = type;
	}

	if (size_p) {
		*size_p = needed;
	}

	if (buffer_p) {
		*buffer_p = buffer;
	} else {
		free(buffer);
	}

	return TRUE;
}
Exemple #2
0
int main (int argc, char* argv[])
{
	
	HANDLE			printer;
	DWORD			type, pcbData;
	LPBYTE			pData = NULL;
	DWORD			i, status;


	if (argc < 3)
	{
		fprintf (stderr, "useage: %s <printername> <value name>\n", argv[0]);
		exit (-1);
	}

	/* open the server */
	if (!OpenPrinter (argv[1], &printer, NULL))
		PrintLastError();
	else
		printf ("Printer [%s] opened successfully.\n\n", argv[1]);


	status=GetPrinterDataEx(printer, "PrinterDriverData", argv[2], &type, pData, 0, &pcbData);
	if ((status != ERROR_SUCCESS) && (status != ERROR_MORE_DATA))
	{
		PrintLastError();
		ClosePrinter (printer);
		exit (-1);
	}

	if ((pData = (LPBYTE)malloc(pcbData)) == NULL)
	{
		fprintf (stderr, "Unable to malloc memory for Value Data!\n");
		exit (-1);
	}
	
	status = GetPrinterDataEx(printer, "PrinterDriverData", argv[2], &type, pData, pcbData, &pcbData);
	if (status == ERROR_SUCCESS)
	{
		LPBYTE		ptr = pData;

		printf ("\tValue Name = %s\n", argv[2]);
		printf ("\tType = %d\n", type);
		printf ("\tData = 0x%x bytes\n", pcbData);
		i = 0;
		while (i < pcbData)
		{
			printf ("\t0x%x", *(ptr));
			*ptr = *ptr < 1;
			ptr++;
			if (i%4 == 3)
				printf ("\n");
			i++;
		}
		printf ("\n");
	}

	printf ("Shifting everything to the right one bit...\n\n");

	status = SetPrinterDataEx(printer, "PrinterDriverData", argv[2], type, pData, pcbData);
	if (status == ERROR_SUCCESS)
	{
		printf ("\tValue Name = %s\n", argv[2]);
		printf ("\tType = %d\n", type);
		printf ("\tData = 0x%x bytes\n", pcbData);
		i = 0;
		while (i < pcbData)
		{
			printf ("\t0x%x", *(pData++));
			if (i%4 == 3)
				printf ("\n");
			i++;
		}
		printf ("\n");
	}
	else
		PrintLastError();
	
	printf ("\n");



	/* close the server */
	if (!ClosePrinter(printer))
		PrintLastError();
	else
		printf ("Printer [%s] closed successfully.\n", argv[1]);

	return 0;

}