能力值:
( LV13,RANK:320 )
|
-
-
2 楼
发个指令让客户端软件调用shutdown.exe -s
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢啊 不过我是想不设置客户端程序的
是不是可以用logonuser通过用户名,密码来关?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
LookupPrivilegeValue(hostname,SE_SHUTDOWN_NAME
,&tkp.Privileges[0].Luid);
函数返回值是0,是什么缘故啊?
怎么修改才可以提高权限的?
就是tkp.Privileges[0].Luid得不到值
还是一个随机数
请问有谁知道是为什么吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
自己顶一个
期待高手的回答啊
|
能力值:
( LV13,RANK:320 )
|
-
-
6 楼
//调整关机权限
procedure TForm1.AdjustPrivileges();
var
hdlProcessHandle : Cardinal;
hdlTokenHandle : Cardinal;
tmpLuid : Int64;
tkpPrivilegeCount : Int64;
tkp : TOKEN_PRIVILEGES;
tkpNewButIgnored : TOKEN_PRIVILEGES;
lBufferNeeded : Cardinal;
Privilege : array[0..0] of _LUID_AND_ATTRIBUTES;
begin
hdlProcessHandle := GetCurrentProcess;
OpenProcessToken(hdlProcessHandle, (TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY),hdlTokenHandle);
// Get the LUID for shutdown privilege.
LookupPrivilegeValue('', 'SeShutdownPrivilege', tmpLuid);
Privilege[0].Luid := tmpLuid;
Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount := 1; // One privilege to set
tkp.Privileges[0] := Privilege[0];
// Enable the shutdown privilege in the access token of this process.
AdjustTokenPrivileges(hdlTokenHandle, False,tkp,Sizeof(tkpNewButIgnored),tkpNewButIgnored,lBufferNeeded);
end;
//关机
function ShutDownSystem():BOOL;
var
hProcess,hAccessToken:THandle;
LUID_AND_ATTRIBUTES:TLUIDAndAttributes;
TOKEN_PRIVILEGES: TTokenPrivileges;
BufferIsNull:DWORD;
Const
SE_SHUTDOWN_NAME='SeShutdownPrivilege';
begin
hProcess:=GetCurrentProcess();
OpenProcessToken(hprocess,TOKEN_ADJUST_PRIVILEGES+TOKEN_QUERY,hAccessToken);
LookupPrivilegeValue(Nil,SE_SHUTDOWN_NAME,LUID_AND_ATTRIBUTES.Luid);
LUID_AND_ATTRIBUTES.Attributes:=SE_PRIVILEGE_ENABLED;
TOKEN_PRIVILEGES.PrivilegeCount:=1;
TOKEN_PRIVILEGES.Privileges[0]:=LUID_AND_ATTRIBUTES;
BufferIsNull:=0;
AdjustTokenPrivileges(hAccessToken,False,TOKEN_PRIVILEGES,sizeof(TOKEN_PRIVILEGES),Nil,BufferIsNull);
ExitWindowsEx(EWX_REBOOT, 0);
ShutDownSystem:=True;
end;
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
仔细看了6楼大哥的代码了
LookupPrivilegeValue(Nil,SE_SHUTDOWN_NAME,LUID_AND_ATTRIBUTES.Luid);
您这个用来获得的是本机的LUID是没问题的
但是我想要的是获得远程主机的LUID
我的代码如下
c=LogonUser("abc","202.203.208.33","123",LOGON32_LOGON_NETWORK,LOGON32_PROVIDER_DEFAULT,&hToken);
c=DuplicateTokenEx(hToken,TOKEN_ALL_ACCESS,NULL,SecurityIdentification,TokenPrimary,&hNewToken);
c=ImpersonateLoggedOnUser(hNewToken);
if(!OpenThreadToken(GetCurrentThread(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,TRUE,&hNewToken))
AfxMessageBox(str1);
c=LookupPrivilegeValue((LPTSTR)(LPCTSTR)hostName,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
我通过LogonUser来传递登录名和密码,但是不知道为什么
c=LookupPrivilegeValue((LPTSTR)(LPCTSTR)hostName,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
返回值c=0,就是说LUID没获得,还是个随机数
我不知道错在哪儿了 再次请教
|
|
|