我對WDK很陌生,我試圖創建一個虛擬打印機驅動程序,它將使用命名管道將數據發送到用戶應用程序。我使用'XPSDrv Driver and Filter Sample'作爲開始。我已經在我已經把這個客戶端代碼末尾添加新的過濾器:從UMDF打印機驅動程序到用戶模式應用程序的命名管道
HANDLE hPipe;
LPTSTR lpvMessage=TEXT("Message from UMDF!");
BOOL fSuccess = FALSE;
DWORD cbToWrite, cbWritten, dwMode;
LPTSTR lpszPipename = TEXT("\\\\.\\pipe\\mynamedpipe");
hPipe = CreateFile(
lpszPipename,
//GENERIC_READ |
GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
dwMode = PIPE_READMODE_MESSAGE;
fSuccess = SetNamedPipeHandleState(
hPipe,
&dwMode,
NULL,
NULL);
if (fSuccess)
{
cbToWrite = (lstrlen(lpvMessage)+1)*sizeof(TCHAR);
fSuccess = WriteFile(
hPipe,
lpvMessage,
cbToWrite,
&cbWritten,
NULL);
}
代碼適用於一個控制檯應用程序項目,但UMDF打印機驅動程序中不起作用。服務器也是一個始終啓動的控制檯應用程序。有人知道爲什麼嗎?或者,也許你知道簡單的方法如何調試打印機驅動程序?
一切順利, 丹尼爾
你的打印驅動程序在哪裏放這個代碼? –
你好,感謝你的重播!我從IPrintPipelineFilter接口將此代碼放入StartOperation()方法內。我也調試了代碼,並且在調用CreateFile時遇到了「訪問被拒絕」。我認爲它的模擬問題,因爲驅動程序和我的命名管道服務器正在使用不同的帳戶,但我不知道如何模擬我的驅動程序,以便它可以訪問我的帳戶上的進程?我試過實現IImpersonateCallback,但我不知道應該從哪個類派生出來,以及何時和誰將調用IImpersonateCallback :: OnImpersonate方法? – user1214919
是否可以在UMDF和用戶應用程序或服務之間使用遠程命名管道? – user1214919