我对 WDK 很陌生,我正在尝试创建一个虚拟打印机驱动程序,它将使用命名管道将数据发送到用户应用程序。我使用“XPSDrv 驱动程序和过滤器示例”作为开始。我在放置此客户端代码的末尾添加了新过滤器:
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 打印机驱动程序。服务器也是一个始终启动的控制台应用程序。有人知道为什么吗?或者,也许您知道如何调试打印机驱动程序的简单方法?
一切顺利,丹尼尔