#include <windows.h>
#include <stdio.h>
#pragma hdrstopvoid main()
{
HANDLE hToken;
LUID setcbnameValue;
TOKEN_PRIVILEGES tkp;
DWORD errcod;
LPVOID lpMsgBuf;
LPCTSTR msgptr; UCHAR InfoBuffer[1000];
PTOKEN_PRIVILEGES ptgPrivileges = (PTOKEN_PRIVILEGES) InfoBuffer;
DWORD dwInfoBufferSize;
DWORD dwPrivilegeNameSize;
DWORD dwDisplayNameSize;
UCHAR ucPrivilegeName[500];
UCHAR ucDisplayName[500];
DWORD dwLangId;
UINT i; if ( ! OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
{
puts( "OpenProcessToken" );
return;
} // ---------------------------------------------------------------------
// enumerate currently held privs (NOTE: not *enabled* privs, just the
// ones you _could_ enable as in the last part) GetTokenInformation( hToken, TokenPrivileges, InfoBuffer,
sizeof InfoBuffer, &dwInfoBufferSize); printf( "Account privileges: \n\n" );
for( i = 0; i < ptgPrivileges->PrivilegeCount; i ++ )
{
dwPrivilegeNameSize = sizeof ucPrivilegeName;
dwDisplayNameSize = sizeof ucDisplayName;
LookupPrivilegeName( NULL, &ptgPrivileges->Privileges[i].Luid,
ucPrivilegeName, &dwPrivilegeNameSize );
LookupPrivilegeDisplayName( NULL, ucPrivilegeName,
ucDisplayName, &dwDisplayNameSize, &dwLangId );
printf( "%40s (%s)\n", ucDisplayName, ucPrivilegeName );
}}
#include <stdio.h>
#pragma hdrstopvoid main()
{
HANDLE hToken;
LUID setcbnameValue;
TOKEN_PRIVILEGES tkp;
DWORD errcod;
LPVOID lpMsgBuf;
LPCTSTR msgptr; UCHAR InfoBuffer[1000];
PTOKEN_PRIVILEGES ptgPrivileges = (PTOKEN_PRIVILEGES) InfoBuffer;
DWORD dwInfoBufferSize;
DWORD dwPrivilegeNameSize;
DWORD dwDisplayNameSize;
UCHAR ucPrivilegeName[500];
UCHAR ucDisplayName[500];
DWORD dwLangId;
UINT i; if ( ! OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
{
puts( "OpenProcessToken" );
return;
} // ---------------------------------------------------------------------
// enumerate currently held privs (NOTE: not *enabled* privs, just the
// ones you _could_ enable as in the last part) GetTokenInformation( hToken, TokenPrivileges, InfoBuffer,
sizeof InfoBuffer, &dwInfoBufferSize); printf( "Account privileges: \n\n" );
for( i = 0; i < ptgPrivileges->PrivilegeCount; i ++ )
{
dwPrivilegeNameSize = sizeof ucPrivilegeName;
dwDisplayNameSize = sizeof ucDisplayName;
LookupPrivilegeName( NULL, &ptgPrivileges->Privileges[i].Luid,
ucPrivilegeName, &dwPrivilegeNameSize );
LookupPrivilegeDisplayName( NULL, ucPrivilegeName,
ucDisplayName, &dwDisplayNameSize, &dwLangId );
printf( "%40s (%s)\n", ucDisplayName, ucPrivilegeName );
}}
procedure TForm1.Button1Click(Sender: TObject);
var
hToken: Cardinal;
ptgPrivileges: PTokenPrivileges;
dwInfoBufferSize: DWORD;
dwPrivilegeNameSize: DWORD;
dwDisplayNameSize: DWORD;
ucPrivilegeName: array[0..1000] of char;
ucDisplayName: array[0..1000] of char;
dwLangId: DWORD;
i: Cardinal;
begin
if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
or TOKEN_QUERY, hToken) then
begin
raise Exception.Create('can''t open processtoke');
exit;
end; GetMem(ptgPrivileges, SizeOf(char) * 1000);
GetTokenInformation(hToken, TokenPrivileges, ptgPrivileges,
sizeof(char)* 1000, dwInfoBufferSize); Memo1.Lines.Add('Account privileges: ' + IntToStr(ptgPrivileges^.PrivilegeCount));
//printf( "Account privileges: \n\n" ); for i := 0 to ptgPrivileges^.PrivilegeCount do
begin
dwPrivilegeNameSize := sizeof(ucPrivilegeName);
dwDisplayNameSize := sizeof(ucDisplayName);
LookupPrivilegeName(nil, ptgPrivileges^.Privileges[i].Luid,
ucPrivilegeName, dwPrivilegeNameSize);
LookupPrivilegeDisplayName(nil, ucPrivilegeName,
ucDisplayName, dwDisplayNameSize, dwLangId);
Memo1.Lines.Add(ucDisplayName + ' -- ' + ucPrivilegeName);
//printf( "%40s (%s)\n", ucDisplayName, ucPrivilegeName );
end;
FreeMem(ptgPrivileges);
end;
int main(int argc, char* argv[])
{
HANDLE hToken;
UCHAR InfoBuffer[1000];
PTOKEN_PRIVILEGES ptgPrivileges = (PTOKEN_PRIVILEGES) InfoBuffer;
DWORD dwInfoBufferSize;
DWORD dwPrivilegeNameSize;
DWORD dwDisplayNameSize;
CHAR ucPrivilegeName[500];
CHAR ucDisplayName[500];
DWORD dwLangId;
UINT i; if ( ! OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
{
puts( "OpenProcessToken" );
return 0;
} // ---------------------------------------------------------------------
// enumerate currently held privs (NOTE: not *enabled* privs, just the
// ones you _could_ enable as in the last part) GetTokenInformation( hToken, TokenPrivileges, InfoBuffer,
sizeof InfoBuffer, &dwInfoBufferSize); printf( "Account privileges Total is %d: \n\n", ptgPrivileges->PrivilegeCount );
for( i = 0; i < ptgPrivileges->PrivilegeCount; i ++ )
{
printf("current i is %d\n",i);
dwPrivilegeNameSize = sizeof ucPrivilegeName;
dwDisplayNameSize = sizeof ucDisplayName;
LookupPrivilegeName( NULL, &ptgPrivileges->Privileges[i].Luid,
(char *)ucPrivilegeName, &dwPrivilegeNameSize );
LookupPrivilegeDisplayName( NULL, (char *)ucPrivilegeName,
(char *)ucDisplayName, &dwDisplayNameSize, &dwLangId );
// printf("ucPrivilegeName: %s\n",ucPrivilegeName);
// printf("ucPrivilegeName: %s\n", ucPrivilegeName);
printf( "Cur I: %d; %40s (%s)\n", i, ucDisplayName, ucPrivilegeName);
}
return 0;
}
那么如果想给系统用户(System)增加权限,应该怎么做呢,系统用户在所有用户还未登陆的时候就已经存在了呀。