我的Delphi 2010應用程序需要將Windows用戶添加到本地管理員組。我使用NetLocalGroupAddMembers得到了這部分工作。將SID轉換爲名稱
現在應用程序需要使用其他語言的本地化版本的Windows。爲此,我使用帶LsaLookupSids函數的SID來獲取組的已翻譯名稱,但無法執行此操作,因爲我不知道如何進行API調用。
我將不勝感激有人可以請教我如何使用LsaLookupSids函數從SID獲取組名('Administrators'的英文版美國版Windows)。
以下是我的代碼:
function AddUser(const username, password: PChar; resetpassword: boolean): boolean; stdcall;
var
NetApiStatus: NET_API_STATUS;
UserInfo1003: USER_INFO_1003;
UserInfo1005: USER_INFO_1005;
ui: USER_INFO_1;
grp: String;
sid: PSID;
snu: SID_NAME_USE;
sidsize: LongWord;
refdomain: PLsaReferencedDomainList; //array [0..MAX_PATH - 1] of char;
refdomainsize: LongWord;
sidstring: PChar;
lgmi3: _LOCALGROUP_MEMBERS_INFO_3;
reftranname: PLsaTranslatedName;
begin
if UserExists(username) then begin
sidstring := PChar('S-1-5-32-544'); //Local Administrators group
refdomain := AllocMem(SizeOf(refdomain));
FillChar(refdomain, SizeOf(refdomain), 0);
reftranname := AllocMem(SizeOf(reftranname));
sidsize := 0;
sid := nil;
sid := AllocMem(Length(sidstring));
sid := PChar(sidstring);
try
LsaLookupSids(GetPolicyHandle, 1, sid, refdomain, reftranname);
grp := reftranname^.Name.Buffer;
showmessage('messg ' + grp);
finally
FreeMem(sid, sidsize);
end;
end;