huahit

常用链接

统计

积分与排名

有用的编程连接

最新评论

强制关闭系统

强制关闭系统
(zhaoxn发表于2006-4-18 22:44:58)

使用 NtShutdownSystem 可以强制关闭 Windows 系统。这个函数是众多的未归档的 Windows NT/2000 Native API 函数之一,它在关闭系统时不会事先通知系统服务程序和用户程序。行为很是粗鲁,除非迫不得已,最好不要使用这个函数。msgina.dll 中用到了这个函数。该函数由 ntdll.dll 输出,其原型如下:

NTSYSAPI
NTSTATUS
NTAPI
NtShutdownSystem(SHUTDOWN_ACTION);

SHUTDOWN_ACTION 结构定义:
typedef enum _SHUTDOWN_ACTION {
ShutdownNoReboot,
ShutdownReboot,
ShutdownPowerOff
}SHUTDOWN_ACTION;

下面是一段使用该函数的例子代码:

HANDLE hToken;
if (OpenProcessToken(GetCurrentProcess(),
TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES tkp;

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);

tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, 0);
CloseHandle(hToken);
}

NtShutdownSystem(ShutdownNoReboot);


最新评论 [发表评论]查看所有评论推荐给好友打印

“编译程序包含”是指的什么?ntdll.dll在安装 Window 的时候就已经在系统目录中了,如果要在自己的程序中调用其中的函数,有两种方法:一种是静态链接;一种是动态链接。由于你使用的毕竟是 ntdll.dll 的一小部分函数,所以一般来说没有必要将整个动态库链接到你的程序中,最好是使用动态链接的方法调用你要使用的函数,或者包装一下你要使用的函数即可。仅供参考。 ( JerryZ 发表于 2006-4-20 8:29:00)

不知道怎么才能让编译程序包含ntdll.dll文件呢?
请指教! ( 菠萝吐司 发表于 2006-4-20 7:39:00)

.......................................................
More...

posted on 2006-04-26 16:12 无为斋 阅读(285) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理