Implemented AddPrinterA, AddPrinterDriverA and GetPrinterDriverDirectory

Moved some 16bit GDI function declarations from winspool.h -> wingdi16.h
oldstable
Huw D M Davies 1999-05-22 18:53:56 +00:00 committed by Alexandre Julliard
parent 338d3b2d1b
commit ee2d9d5849
5 changed files with 316 additions and 27 deletions

View File

@ -14,6 +14,7 @@
#include "winerror.h"
#include "winreg.h"
#include "debugtools.h"
#include "heap.h"
DEFAULT_DEBUG_CHANNEL(winspool)
@ -44,7 +45,10 @@ static OPENEDPRINTERA OpenedPrinterTableA[NUM_PRINTER_MAX] =
{NULL, -1, NULL}
};
static char Printers[] = "System\\CurrentControlSet\\Control\\Print\\Printers\\";
static char Printers[] =
"System\\CurrentControlSet\\control\\Print\\Printers\\";
static char Drivers[] =
"System\\CurrentControlSet\\control\\Print\\Environments\\Wine\\Drivers\\";
/******************************************************************
@ -646,7 +650,7 @@ BOOL WINAPI EnumPrintersA(
/* Enter critical section to prevent AddPrinters() et al. to
* modify whilst we're reading in the registry
*/
*/
InitializeCriticalSection(&PRINT32_RegistryBlocker);
EnterCriticalSection(&PRINT32_RegistryBlocker);
@ -894,8 +898,100 @@ BOOL WINAPI AddJobW(HANDLE hPrinter, DWORD Level, LPBYTE pData, DWORD cbBuf,
*/
HANDLE WINAPI AddPrinterA(LPSTR pName, DWORD Level, LPBYTE pPrinter)
{
FIXME("(%s,%ld,%p): stub\n", pName, Level, pPrinter);
return 0;
PRINTER_INFO_2A *pi = (PRINTER_INFO_2A *) pPrinter;
HANDLE retval;
HKEY hkeyPrinter, hkeyPrinters, hkeyDriver, hkeyDrivers;
TRACE("(%s,%ld,%p)\n", pName, Level, pPrinter);
if(pName != NULL) {
FIXME("pName = `%s' - unsupported\n", pName);
SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
if(Level != 2) {
WARN("Level = %ld\n", Level);
SetLastError(ERROR_INVALID_LEVEL);
return 0;
}
if(!pPrinter) {
SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
if(RegCreateKeyA(HKEY_LOCAL_MACHINE, Printers, &hkeyPrinters) !=
ERROR_SUCCESS) {
ERR("Can't create Printers key\n");
return 0;
}
if(RegOpenKeyA(hkeyPrinters, pi->pPrinterName, &hkeyPrinter) ==
ERROR_SUCCESS) {
SetLastError(ERROR_PRINTER_ALREADY_EXISTS);
RegCloseKey(hkeyPrinter);
RegCloseKey(hkeyPrinters);
return 0;
}
if(RegCreateKeyA(HKEY_LOCAL_MACHINE, Drivers, &hkeyDrivers) !=
ERROR_SUCCESS) {
ERR("Can't create Drivers key\n");
RegCloseKey(hkeyPrinters);
return 0;
}
if(RegOpenKeyA(hkeyDrivers, pi->pDriverName, &hkeyDriver) !=
ERROR_SUCCESS) {
WARN("Can't find driver `%s'\n", pi->pDriverName);
RegCloseKey(hkeyPrinters);
RegCloseKey(hkeyDrivers);
SetLastError(ERROR_UNKNOWN_PRINTER_DRIVER);
return 0;
}
RegCloseKey(hkeyDriver);
RegCloseKey(hkeyDrivers);
if(strcasecmp(pi->pPrintProcessor, "WinPrint")) { /* FIXME */
WARN("Can't find processor `%s'\n", pi->pPrintProcessor);
SetLastError(ERROR_UNKNOWN_PRINTPROCESSOR);
RegCloseKey(hkeyPrinters);
return 0;
}
if(RegCreateKeyA(hkeyPrinters, pi->pPrinterName, &hkeyPrinter) !=
ERROR_SUCCESS) {
WARN("Can't create printer `%s'\n", pi->pPrinterName);
SetLastError(ERROR_INVALID_PRINTER_NAME);
RegCloseKey(hkeyPrinters);
return 0;
}
RegSetValueExA(hkeyPrinter, "Attributes", 0, REG_DWORD,
(LPSTR)&pi->Attributes, sizeof(DWORD));
RegSetValueExA(hkeyPrinter, "Default DevMode", 0, REG_BINARY,
(LPSTR)&pi->pDevMode,
pi->pDevMode ? pi->pDevMode->dmSize : 0);
RegSetValueExA(hkeyPrinter, "Description", 0, REG_SZ, pi->pComment, 0);
RegSetValueExA(hkeyPrinter, "Location", 0, REG_SZ, pi->pLocation, 0);
RegSetValueExA(hkeyPrinter, "Name", 0, REG_SZ, pi->pPrinterName, 0);
RegSetValueExA(hkeyPrinter, "Parameters", 0, REG_SZ, pi->pParameters, 0);
RegSetValueExA(hkeyPrinter, "Port", 0, REG_SZ, pi->pPortName, 0);
RegSetValueExA(hkeyPrinter, "Print Processor", 0, REG_SZ,
pi->pPrintProcessor, 0);
RegSetValueExA(hkeyPrinter, "Printer Driver", 0, REG_SZ, pi->pDriverName,
0);
RegSetValueExA(hkeyPrinter, "Priority", 0, REG_DWORD,
(LPSTR)&pi->Priority, sizeof(DWORD));
RegSetValueExA(hkeyPrinter, "Separator File", 0, REG_SZ, pi->pSepFile, 0);
RegSetValueExA(hkeyPrinter, "Share Name", 0, REG_SZ, pi->pShareName, 0);
RegSetValueExA(hkeyPrinter, "Start Time", 0, REG_DWORD,
(LPSTR)&pi->StartTime, sizeof(DWORD));
RegSetValueExA(hkeyPrinter, "Status", 0, REG_DWORD,
(LPSTR)&pi->Status, sizeof(DWORD));
RegSetValueExA(hkeyPrinter, "Until Time", 0, REG_DWORD,
(LPSTR)&pi->UntilTime, sizeof(DWORD));
RegCloseKey(hkeyPrinter);
RegCloseKey(hkeyPrinters);
if(!OpenPrinterA(pi->pPrinterName, &retval, NULL)) {
ERR("OpenPrinter failing\n");
return 0;
}
return retval;
}
/*****************************************************************************
@ -1104,11 +1200,27 @@ BOOL WINAPI GetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter,
* GetPrinterDriver32A [WINSPOOL.190]
*/
BOOL WINAPI GetPrinterDriverA(HANDLE hPrinter, LPSTR pEnvironment,
DWORD Level, LPBYTE pDriverInfo,
DWORD cbBuf, LPDWORD pcbNeeded)
DWORD Level, LPBYTE pDriverInfo,
DWORD cbBuf, LPDWORD pcbNeeded)
{
OPENEDPRINTERA *lpOpenedPrinter;
LPSTR lpName;
FIXME("(%d,%s,%ld,%p,%ld,%p): stub\n",hPrinter,pEnvironment,
Level,pDriverInfo,cbBuf, pcbNeeded);
lpOpenedPrinter = WINSPOOL_GetOpenedPrinterA(hPrinter);
if(!lpOpenedPrinter) {
SetLastError(ERROR_INVALID_HANDLE);
return FALSE;
}
lpName = lpOpenedPrinter->lpsPrinterName;
if(pEnvironment) {
FIXME("pEnvironment = `%s'\n", pEnvironment);
SetLastError(ERROR_INVALID_ENVIRONMENT);
return FALSE;
}
return FALSE;
}
@ -1123,14 +1235,150 @@ BOOL WINAPI GetPrinterDriverW(HANDLE hPrinter, LPWSTR pEnvironment,
Level,pDriverInfo,cbBuf, pcbNeeded);
return FALSE;
}
/*****************************************************************************
* GetPrinterDriverDirectoryA [WINSPOOL.191]
*/
BOOL WINAPI GetPrinterDriverDirectoryA(LPSTR pName, LPSTR pEnvironment,
DWORD Level, LPBYTE pDriverDirectory,
DWORD cbBuf, LPDWORD pcbNeeded)
{
DWORD needed;
TRACE("(%s, %s, %ld, %p, %ld, %p)\n", pName, pEnvironment, Level,
pDriverDirectory, cbBuf, pcbNeeded);
if(pName != NULL) {
FIXME("pName = `%s' - unsupported\n", pName);
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if(pEnvironment != NULL) {
FIXME("pEnvironment = `%s' - unsupported\n", pEnvironment);
SetLastError(ERROR_INVALID_ENVIRONMENT);
return FALSE;
}
if(Level != 1) /* win95 ignores this so we just carry on */
WARN("Level = %ld - assuming 1\n", Level);
/* FIXME should read from registry */
needed = GetSystemDirectoryA(pDriverDirectory, cbBuf);
needed++;
if(pcbNeeded)
*pcbNeeded = needed;
if(needed > cbBuf) {
SetLastError(ERROR_INSUFFICIENT_BUFFER);
return FALSE;
}
return TRUE;
}
/*****************************************************************************
* GetPrinterDriverDirectoryW [WINSPOOL.192]
*/
BOOL WINAPI GetPrinterDriverDirectoryW(LPWSTR pName, LPWSTR pEnvironment,
DWORD Level, LPBYTE pDriverDirectory,
DWORD cbBuf, LPDWORD pcbNeeded)
{
LPSTR pNameA = NULL, pEnvironmentA = NULL;
BOOL ret;
if(pName)
pNameA = HEAP_strdupWtoA( GetProcessHeap(), 0, pName );
if(pEnvironment)
pEnvironmentA = HEAP_strdupWtoA( GetProcessHeap(), 0, pEnvironment );
ret = GetPrinterDriverDirectoryA( pNameA, pEnvironmentA, Level,
pDriverDirectory, cbBuf, pcbNeeded );
if(pNameA)
HeapFree( GetProcessHeap(), 0, pNameA );
if(pEnvironmentA)
HeapFree( GetProcessHeap(), 0, pEnvironment );
return ret;
}
/*****************************************************************************
* AddPrinterDriver32A [WINSPOOL.120]
*/
BOOL WINAPI AddPrinterDriverA(LPSTR printerName,DWORD level,
LPBYTE pDriverInfo)
BOOL WINAPI AddPrinterDriverA(LPSTR pName, DWORD level, LPBYTE pDriverInfo)
{
FIXME("(%s,%ld,%p): stub\n",printerName,level,pDriverInfo);
return FALSE;
DRIVER_INFO_3A di3;
HKEY hkeyDrivers, hkeyName;
TRACE("(%s,%ld,%p)\n",pName,level,pDriverInfo);
if(level != 2 && level != 3) {
SetLastError(ERROR_INVALID_LEVEL);
return FALSE;
}
if(pName != NULL) {
FIXME("pName= `%s' - unsupported\n", pName);
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if(!pDriverInfo) {
WARN("pDriverInfo == NULL");
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if(level == 3)
di3 = *(DRIVER_INFO_3A *)pDriverInfo;
else {
memset(&di3, 0, sizeof(di3));
*(DRIVER_INFO_2A *)&di3 = *(DRIVER_INFO_2A *)pDriverInfo;
}
if(!di3.pName || !di3.pDriverPath || !di3.pConfigFile ||
!di3.pDataFile) {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
if(!di3.pDefaultDataType) di3.pDefaultDataType = "";
if(!di3.pDependentFiles) di3.pDependentFiles = "\0";
if(!di3.pHelpFile) di3.pHelpFile = "";
if(!di3.pMonitorName) di3.pMonitorName = "";
if(di3.pEnvironment) {
FIXME("pEnvironment = `%s'\n", di3.pEnvironment);
SetLastError(ERROR_INVALID_ENVIRONMENT);
return FALSE;
}
if(RegCreateKeyA(HKEY_LOCAL_MACHINE, Drivers, &hkeyDrivers) !=
ERROR_SUCCESS) {
ERR("Can't create Drivers key\n");
return FALSE;
}
if(level == 2) { /* apparently can't overwrite with level2 */
if(RegOpenKeyA(hkeyDrivers, di3.pName, &hkeyName) == ERROR_SUCCESS) {
RegCloseKey(hkeyName);
RegCloseKey(hkeyDrivers);
WARN("Trying to create existing printer driver `%s'\n", di3.pName);
SetLastError(ERROR_PRINTER_DRIVER_ALREADY_INSTALLED);
return FALSE;
}
}
if(RegCreateKeyA(hkeyDrivers, di3.pName, &hkeyName) != ERROR_SUCCESS) {
RegCloseKey(hkeyDrivers);
ERR("Can't create Name key\n");
return FALSE;
}
RegSetValueExA(hkeyName, "Configuration File", 0, REG_SZ, di3.pConfigFile,
0);
RegSetValueExA(hkeyName, "Data File", 0, REG_SZ, di3.pDataFile, 0);
RegSetValueExA(hkeyName, "Driver", 0, REG_SZ, di3.pDriverPath, 0);
RegSetValueExA(hkeyName, "Version", 0, REG_DWORD, (LPSTR)&di3.cVersion,
sizeof(DWORD));
RegSetValueExA(hkeyName, "Datatype", 0, REG_SZ, di3.pDefaultDataType, 0);
RegSetValueExA(hkeyName, "Dependent Files", 0, REG_MULTI_SZ,
di3.pDependentFiles, 0);
RegSetValueExA(hkeyName, "Help File", 0, REG_SZ, di3.pHelpFile, 0);
RegSetValueExA(hkeyName, "Monitor", 0, REG_SZ, di3.pMonitorName, 0);
RegCloseKey(hkeyName);
RegCloseKey(hkeyDrivers);
return TRUE;
}
/*****************************************************************************
* AddPrinterDriver32W [WINSPOOL.121]

View File

@ -278,6 +278,7 @@ BOOL16 WINAPI BeginPath16(HDC16);
BOOL16 WINAPI BitBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,INT16,DWORD);
BOOL16 WINAPI Chord16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,INT16,INT16);
BOOL16 WINAPI CloseFigure16(HDC16);
int WINAPI CloseJob16(HANDLE16);
HMETAFILE16 WINAPI CloseMetaFile16(HDC16);
INT16 WINAPI CombineRgn16(HRGN16,HRGN16,HRGN16,INT16);
HMETAFILE16 WINAPI CopyMetaFile16(HMETAFILE16,LPCSTR);
@ -314,12 +315,17 @@ BOOL16 WINAPI CreateScalableFontResource16(UINT16,LPCSTR,LPCSTR,LPCSTR);
HBRUSH16 WINAPI CreateSolidBrush16(COLORREF);
VOID WINAPI Death16(HDC16);
BOOL16 WINAPI DeleteDC16(HDC16);
int WINAPI DeleteJob16(HANDLE16,WORD);
BOOL16 WINAPI DeleteMetaFile16(HMETAFILE16);
BOOL16 WINAPI DeleteObject16(HGDIOBJ16);
BOOL16 WINAPI DPtoLP16(HDC16,LPPOINT16,INT16);
DWORD WINAPI DrvGetPrinterData16(LPSTR,LPSTR,LPDWORD,LPBYTE,int cbData,LPDWORD);
DWORD WINAPI DrvSetPrinterData16(LPSTR,LPSTR,DWORD,LPBYTE,DWORD);
BOOL16 WINAPI Ellipse16(HDC16,INT16,INT16,INT16,INT16);
INT16 WINAPI EndDoc16(HDC16);
INT16 WINAPI EndPage16(HDC16);
BOOL16 WINAPI EndPath16(HDC16);
int WINAPI EndSpoolPage16(HANDLE16);
INT16 WINAPI EnumFontFamilies16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);
INT16 WINAPI EnumFontFamiliesEx16(HDC16,LPLOGFONT16,FONTENUMPROCEX16,LPARAM,DWORD);
INT16 WINAPI EnumFonts16(HDC16,LPCSTR,FONTENUMPROC16,LPARAM);
@ -384,6 +390,7 @@ DWORD WINAPI GetRegionData16(HRGN16,DWORD,LPRGNDATA);
INT16 WINAPI GetRelAbs16(HDC16);
INT16 WINAPI GetRgnBox16(HRGN16,LPRECT16);
INT16 WINAPI GetROP216(HDC16);
DWORD WINAPI GetSpoolJob16(int,LONG);
HGDIOBJ16 WINAPI GetStockObject16(INT16);
INT16 WINAPI GetStretchBltMode16(HDC16);
UINT16 WINAPI GetSystemPaletteEntries16(HDC16,UINT16,UINT16,LPPALETTEENTRY);
@ -424,6 +431,7 @@ BOOL16 WINAPI OffsetViewportOrgEx16(HDC16,INT16,INT16,LPPOINT16);
INT16 WINAPI OffsetVisRgn16(HDC16,INT16,INT16);
DWORD WINAPI OffsetWindowOrg16(HDC16,INT16,INT16);
BOOL16 WINAPI OffsetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);
HANDLE16 WINAPI OpenJob16(LPSTR,LPSTR,HDC16);
BOOL16 WINAPI PaintRgn16(HDC16,HRGN16);
BOOL16 WINAPI PatBlt16(HDC16,INT16,INT16,INT16,INT16,DWORD);
HRGN16 WINAPI PathToRegion16(HDC16);
@ -505,7 +513,7 @@ DWORD WINAPI SetWindowOrg16(HDC16,INT16,INT16);
BOOL16 WINAPI SetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);
INT16 WINAPI StartDoc16(HDC16,const DOCINFO16*);
INT16 WINAPI StartPage16(HDC16);
INT16 WINAPI EndPage16(HDC16);
int WINAPI StartSpoolPage16(HANDLE16);
BOOL16 WINAPI StretchBlt16(HDC16,INT16,INT16,INT16,INT16,HDC16,INT16,
INT16,INT16,INT16,DWORD);
INT16 WINAPI StretchDIBits16(HDC16,INT16,INT16,INT16,INT16,INT16,INT16,
@ -516,6 +524,8 @@ BOOL16 WINAPI TextOut16(HDC16,INT16,INT16,LPCSTR,INT16);
BOOL16 WINAPI UnrealizeObject16(HGDIOBJ16);
INT16 WINAPI UpdateColors16(HDC16);
BOOL16 WINAPI WidenPath16(HDC16);
int WINAPI WriteDialog16(HANDLE16,LPSTR,WORD);
int WINAPI WriteSpool16(HANDLE16,LPSTR,WORD);
#endif /* __WINE_WINGDI16_H */

View File

@ -260,7 +260,17 @@ extern int WIN32_LastError;
#define ERROR_CLASS_DOES_NOT_EXIST 1411
#define ERROR_CLASS_HAS_WINDOWS 1412
#define ERROR_COMMITMENT_LIMIT 1455
#define ERROR_INVALID_PRINTER_NAME 1801
#define ERROR_PRINTER_DRIVER_ALREADY_INSTALLED 1795
#define ERROR_UNKNOWN_PORT 1796
#define ERROR_UNKNOWN_PRINTER_DRIVER 1797
#define ERROR_UNKNOWN_PRINTPROCESSOR 1798
#define ERROR_INVALID_SEPARATOR_FILE 1799
#define ERROR_INVALID_PRIORITY 1800
#define ERROR_INVALID_PRINTER_NAME 1801
#define ERROR_PRINTER_ALREADY_EXISTS 1802
#define ERROR_INVALID_PRINTER_COMMAND 1803
#define ERROR_INVALID_DATATYPE 1804
#define ERROR_INVALID_ENVIRONMENT 1805
/* HRESULT values for OLE, SHELL and other Interface stuff */
/* the codes 4000-40ff are reserved for OLE */

View File

@ -105,6 +105,36 @@ DECL_WINELIB_TYPE_AW(DRIVER_INFO_2)
DECL_WINELIB_TYPE_AW(PDRIVER_INFO_2)
DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_2)
typedef struct _DRIVER_INFO_3A {
DWORD cVersion;
LPSTR pName;
LPSTR pEnvironment;
LPSTR pDriverPath;
LPSTR pDataFile;
LPSTR pConfigFile;
LPSTR pHelpFile;
LPSTR pDependentFiles;
LPSTR pMonitorName;
LPSTR pDefaultDataType;
} DRIVER_INFO_3A, *PDRIVER_INFO_3A, *LPDRIVER_INFO_3A;
typedef struct _DRIVER_INFO_3W {
DWORD cVersion;
LPWSTR pName;
LPWSTR pEnvironment;
LPWSTR pDriverPath;
LPWSTR pDataFile;
LPWSTR pConfigFile;
LPWSTR pHelpFile;
LPWSTR pDependentFiles;
LPWSTR pMonitorName;
LPWSTR pDefaultDataType;
} DRIVER_INFO_3W, *PDRIVER_INFO_3W, *LPDRIVER_INFO_3W;
DECL_WINELIB_TYPE_AW(DRIVER_INFO_3)
DECL_WINELIB_TYPE_AW(PDRIVER_INFO_3)
DECL_WINELIB_TYPE_AW(LPDRIVER_INFO_3)
typedef struct _PRINTER_INFO_1A {
DWORD Flags;
LPSTR pDescription;
@ -219,19 +249,6 @@ DECL_WINELIB_TYPE_AW(LPPRINTER_INFO_5)
#endif /* Status */
/* DECLARATIONS */
DWORD WINAPI DrvGetPrinterData16(LPSTR lpPrinter, LPSTR lpProfile,
LPDWORD lpType, LPBYTE lpPrinterData, int cbData, LPDWORD lpNeeded);
DWORD WINAPI DrvSetPrinterData16(LPSTR lpPrinter, LPSTR lpProfile,
DWORD lpType, LPBYTE lpPrinterData, DWORD dwSize);
HANDLE16 WINAPI OpenJob16(LPSTR lpOutput, LPSTR lpTitle, HDC16 hDC);
int WINAPI CloseJob16(HANDLE16 hJob);
int WINAPI WriteSpool16(HANDLE16 hJob, LPSTR lpData, WORD cch);
int WINAPI DeleteJob16(HANDLE16 hJob, WORD wNotUsed);
int WINAPI StartSpoolPage16(HANDLE16 hJob);
int WINAPI EndSpoolPage16(HANDLE16 hJob);
DWORD WINAPI GetSpoolJob16(int nOption, LONG param);
int WINAPI WriteDialog16(HANDLE16 hJob, LPSTR lpMsg, WORD cchMsg);
INT WINAPI DeviceCapabilitiesA(LPCSTR pDevice,LPCSTR pPort,WORD fwCapability,
LPSTR pOutput, LPDEVMODEA pDevMode);
INT WINAPI DeviceCapabilitiesW(LPCWSTR pDevice, LPCWSTR pPort,
@ -271,6 +288,10 @@ BOOL WINAPI EnumPrintersW(DWORD dwType, LPWSTR lpszName,
BOOL WINAPI PrinterProperties(HWND hWnd, HANDLE hPrinter);
BOOL WINAPI GetPrinterDriverDirectoryA(LPSTR,LPSTR,DWORD,LPBYTE,DWORD,LPDWORD);
BOOL WINAPI GetPrinterDriverDirectoryW(LPWSTR,LPWSTR,DWORD,LPBYTE,DWORD,LPDWORD);
#define GetPrinterDriverDirectory WINELIB_NAME_AW(GetPrinterDriverDirectory)
#ifdef __cplusplus
} /* extern "C" */
#endif

View File

@ -91,8 +91,8 @@ type win32
188 stub GetPrinterDataA
189 stub GetPrinterDataW
190 stdcall GetPrinterDriverA(long str long ptr long ptr) GetPrinterDriverA
191 stub GetPrinterDriverDirectoryA
192 stub GetPrinterDriverDirectoryW
191 stdcall GetPrinterDriverDirectoryA(str str long ptr long ptr) GetPrinterDriverDirectoryA
192 stdcall GetPrinterDriverDirectoryW(wstr wstr long ptr long ptr) GetPrinterDriverDirectoryW
193 stdcall GetPrinterDriverW(long str long ptr long ptr) GetPrinterDriverW
194 stdcall GetPrinterW(long long ptr long ptr) GetPrinterW
195 stub InitializeDll