win2k中 WINLOGON 桌面为什么无法打开
代码如下,
/////////////////////////
void ChangePrivilege(HANDLE pmy,char * PrivilegeVal)
{
int isok;
TOKEN_PRIVILEGES NewState;
HANDLE hToken;
NewState.PrivilegeCount=1;
NewState.Privileges[0].Attributes=2;
NewState.Privileges[0].Luid.HighPart=0;
NewState.Privileges[0].Luid.LowPart=0;
isok=LookupPrivilegeValue(0,PrivilegeVal,&NewState.Privileges[0].Luid);
isok=OpenProcessToken(pmy,0x20,&hToken);
isok=AdjustTokenPrivileges(hToken,0,&NewState,0x10,0,0);
CloseHandle(hToken);
}
void CFDlg::OnButton1()
{
HANDLE pmy;
pmy = GetCurrentProcess();
ChangePrivilege(pmy,SE_DEBUG_NAME);
HDESK hdeskCurrent;
HDESK hdesk;
HWINSTA hwinstaCurrent;
HWINSTA hwinsta;
hwinstaCurrent = GetProcessWindowStation();
hdeskCurrent = GetThreadDesktop(GetCurrentThreadId());
//打开winsta0
hwinsta = OpenWindowStation("winsta0", FALSE,
WINSTA_ACCESSCLIPBOARD |
WINSTA_ACCESSGLOBALATOMS |
WINSTA_CREATEDESKTOP |
WINSTA_ENUMDESKTOPS |
WINSTA_ENUMERATE |
WINSTA_EXITWINDOWS |
WINSTA_READATTRIBUTES |
WINSTA_READSCREEN |
WINSTA_WRITEATTRIBUTES);
//打开desktop
hdesk = OpenDesktop("WINLOGON", 0, FALSE,
DESKTOP_CREATEMENU |
DESKTOP_CREATEWINDOW |
DESKTOP_ENUMERATE |
DESKTOP_HOOKCONTROL |
DESKTOP_JOURNALPLAYBACK |
DESKTOP_JOURNALRECORD |
DESKTOP_READOBJECTS |
DESKTOP_SWITCHDESKTOP |
DESKTOP_WRITEOBJECTS);
if (hdesk == NULL)
AfxMessageBox(" hdesk == NULL ");
}
//////////////////////////
这段代码 是根据网上的资料拼凑的,
我已经试过了,如果放在服务中是可以打开WINLOGON 桌面的,
但是为什么普通的win32程序就不行,
谁知道原因,谢谢