拥有一个Windows环境,其中所有网络打印机上的“端口”选项卡都为空,但仅限于某些win7客户端。这些客户端的所有其他打印功能适用于这些打印服务器上的打印机。由于环境的设置方式,我无法轻松将内核调试程序连接到这些vSphere虚拟机。
所有计算机都加入同一个域,并以同一用户身份登录。 在Explorer.exe上使用Rohitab API Monitor我发现winspool EnumPorts正在成功,但在失败的机器上返回0端口,但在相同的用户帐户/相同的网络和相同的参数下,它们在两个工作中返回600多个端口机器..
我写了一个测试C ++程序来自己测试EnumPorts。 Visual Studio 2015项目+二进制文件是here
该计划的关键部分是:
pPortInfo = (PORT_INFO_2 *)malloc(cbNeeded);
bResult = EnumPorts(argv[1],
2,
(LPBYTE)pPortInfo,
cbNeeded,
&cbNeeded,
&cbReturned);
在pPortInfo上工作的机器输出是:
CALL: EnumPorts("\\PRINTSERVER01",(LPBYTE)pPortInfo,4096,&cbNeeded,&cbReturned)
RETURNED: false ERROR CODE: 122 ERROR MSG: The data area passed to a system call is too small.
CALL: EnumPorts("\\PRINTSERVER01",(LPBYTE)pPortInfo,121800,&cbNeeded,&cbReturned)
RETURNED: true ERROR CODE: 0 ERROR MSG: The operation completed successfully.
cbReturned = 629
PORT #0
Port Name: TS005
Monitor Name: Dynamic Print Monitor
Description: Inactive TS Port
Port Type: WRITE READ
PORT #1
Port Name: TS004
Monitor Name: Dynamic Print Monitor
Description: Inactive TS Port
Port Type: WRITE READ
etc...
在破碎的机器上:
CALL: EnumPorts("\\PRINTSERVER01",(LPBYTE)pPortInfo,4096,&cbNeeded,&cbReturned)
RETURNED: true ERROR CODE: 0 ERROR MSG: The operation completed successfully.
cbReturned = 0
到目前为止,我已经确定/尝试了什么