martona/mhook

Hook OpenPrinterW failed under X64 platform

lhg19202212 opened this issue · 4 comments

Error message: ANOMALY: use of REX.w is meaningless (default operand size is 64).
My Test Code:
typedef BOOL (WINAPI* PFNOPENPRINTERW)(
LPWSTR pPrinterName,
LPHANDLE phPrinter,
LPPRINTER_DEFAULTSW pDefault
);

PFNOPENPRINTERW fpOpenPrinterW=(PFNOPENPRINTERW)GetProcAddress(LoadLibraryW(L"winspool.drv"), "OpenPrinterW");

BOOL
WINAPI
MyOpenPrinterW(
LPWSTR pPrinterName,
LPHANDLE phPrinter,
LPPRINTER_DEFAULTSW pDefault)

{
BOOL Status;
char temp[MAX_PATH]={0x00};
GetModuleFileNameA(NULL,temp,MAX_PATH);
printf("%s[%d] m_sProcessName=%s \n",FILE,LINE,temp);
Status = fpOpenPrinterW (pPrinterName, phPrinter, pDefault);
return Status;
}

int wmain(int argc, WCHAR* argv[])
{
HANDLE hProc = NULL;
HANDLE m_handle=NULL;
if(Mhook_SetHook((PVOID_)&fpOpenPrinterW, MyOpenPrinterW))
{
OpenPrinterW(L"\Brother MFC-7860DN Printer",&m_handle,NULL);
if(m_handle)
CloseHandle(m_handle);
Mhook_Unhook((PVOID_)&fpOpenPrinterW);
}else{
printf("%s[%d].OpenPrinterW hook fail\n",FILE,LINE);
}
return 0;
}

I cannot reproduce this. Which version of winspool.drv do you have?

@lhg19202212 Hi, I'm also having this problem.
Some of the GDI hooks I did work, some of them not, and none of the winspool.drv hooked functions work...
How did you fixed this ?

@poizan42 You were right, I was convinced I had the last version, but actually no. Thanks !