win2k中 WINLOGON 桌面为什么无法打开

BOYGUARD110 2004-12-22 12:09:20

代码如下,

/////////////////////////


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程序就不行,
谁知道原因,谢谢


...全文
128 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
BOYGUARD110 2004-12-22
  • 打赏
  • 举报
回复

本来是想在普通的程序中试一下 独立的代码片断, 没想到普通进程提供不了实验环境,谢谢大家



tabris17 2004-12-22
  • 打赏
  • 举报
回复
hdesk=OpenDesktop("WinSta0\\Winlogon",......);
danyueer 2004-12-22
  • 打赏
  • 举报
回复
你的权限不够,http://search.csdn.net/Expert/TopicView3.asp?id=1113085当中的说法比较正确,想要打开Winlogon桌面,你的进程必须在服务或者驱动程序里面,普通Win32程序运行在具体账户下,不能够拥有访问超账户system权限的Winlogon桌面的能力。

我是用API Hook的办法,通过修改IAT来禁用SAS热键的,如果不是在服务当中,就需要在系统管理员账号下,调用CreateRemoteThread来修改Winlogon的IAT,一般的SetWindowsHookEx无法成功。Hook SAS需要比较全面的Windows内核机制的知识,希望你多看一些资料。
BOYGUARD110 2004-12-22
  • 打赏
  • 举报
回复

其实就是那个 win2k 动态 屏蔽 ctrl+alt+del 的问题, 不要 gina 和 驱动 ,

自己想实践一下,没想到开始就遇到这个问题,

是不是 不要 gina 和 驱动 ,但是 需要一个 服务 ?

参考资料如下:

// 在NT/2000中怎么禁用Ctrl+Alt+Delete?(不能用gina,键盘驱动)
// http://search.csdn.net/Expert/TopicView3.asp?id=1113085
//
//
// 如何: 在Windows2000中动态禁用/启用Ctrl-Alt-Delete
// http://blog.csdn.net/jiangsheng/archive/2003/11/09/3789.aspx



liudancodeman 2004-12-22
  • 打赏
  • 举报
回复
帮顶