15,471
社区成员
发帖
与我相关
我的任务
分享
BOOL Open(LPCSTR szChannelName,PHANDLE lpHandle)
{
HANDLE hWTSHandle = NULL;
HANDLE hWTSFileHandle = NULL;
PVOID vcFileHandlePtr = NULL;
BOOL bSucc = FALSE;
DWORD len;
hWTSHandle = WTSVirtualChannelOpen(
WTS_CURRENT_SERVER_HANDLE,
WTS_CURRENT_SESSION,
(LPSTR)szChannelName
);
bSucc = WTSVirtualChannelQuery(
hWTSHandle,
WTSVirtualFileHandle,
&vcFileHandlePtr,
&len );
if(bSucc)
{
hWTSFileHandle = *(HANDLE *)vcFileHandlePtr;
DuplicateHandle(
GetCurrentProcess(),
hWTSFileHandle,
GetCurrentProcess(),
lpHandle,
0,
FALSE,
DUPLICATE_SAME_ACCESS
);
}
if(vcFileHandlePtr)
{
WTSFreeMemory( vcFileHandlePtr );
vcFileHandlePtr = NULL;
}
if(hWTSHandle != NULL)
{
WTSVirtualChannelClose( hWTSHandle );
}
return bSucc;
}
这个函数第二个参数,会返回一个lpHandle值,就是句柄。后面的readfile以此句柄为基础进行操作了。