Delphi 获取Windows本地用户组和用户列表
头文件不全请加载 JEDI Windows Security Code Library
{$POINTERMATH ON}
Function GetUserGroup():Integer; Var szComputer:Array [0..MAXCHAR] Of WideChar; Buffer :LPLOCALGROUP_INFO_1; nTotal :DWORD; nEntries :DWORD; hResume :PDWORD_PTR; nCount :DWORD; nStatus :DWORD; dwPrefMax :DWORD; lpszStr :Array [0..MAX_PATH] Of WideChar; iLen :Integer; iFull :Integer; begin Result := 0; nEntries := SizeOf(szComputer); GetComputerNameW(@szComputer, nEntries); nEntries := 0; nTotal := 0; Buffer := Nil; dwPrefMax := MAX_PREFERRED_LENGTH; hResume := Nil; Writeln('User Group:', szComputer); nStatus := NetLocalGroupEnum(szComputer, 0, PByte(Buffer), dwPrefMax, @nEntries, @nTotal, @hResume); if (nStatus = S_OK) Or (nStatus = ERROR_MORE_DATA) then begin for nCount := 0 to nTotal-1 do begin Inc(Result); if Buffer[nCount].lgrpi1_comment = Nil then Break; iLen := lstrlenW(Buffer[nCount].lgrpi1_comment); iFull:= 40 - Min(iLen, 32); ZeroMemory(@lpszStr, SizeOf(lpszStr)); FillSpaces(@lpszStr, 10, True); lstrcatW(lpszStr, Buffer[nCount].lgrpi1_comment); FillSpaces(@lpszStr[iLen + 10], iFull, True); lstrcatW(lpszStr, Buffer[nCount].lgrpi1_name); Writeln(lpszStr); end; end; if Buffer <> Nil then NetApiBufferFree(Buffer); Writeln('.Done!, Total: ', Result); end;
Function GetUsers():Integer; Var szComputer:Array [0..MAXCHAR] Of WideChar; Buffer :PUserInfo3; nTotal :DWORD; nEntries :DWORD; hResume :PDWORD_PTR; nCount :DWORD; dwPrefMax :DWORD; nStatus :DWORD; lpszStr :Array [0..MAX_PATH] Of WideChar; begin Result := 0; nEntries := SizeOf(szComputer); GetComputerNameW(@szComputer, nEntries); nEntries := 0; nTotal := 0; nEntries := 0; nTotal := 0; Buffer := Nil; dwPrefMax := MAX_PREFERRED_LENGTH; hResume := Nil; Writeln('User Group:', szComputer); nStatus := NetUserEnum(szComputer, 3, FILTER_NORMAL_ACCOUNT, PByte(Buffer), dwPrefMax, @nEntries, @nTotal, @hResume); if (nStatus = S_OK) Or (nStatus = ERROR_MORE_DATA) then begin for nCount := 0 to nTotal-1 do begin Inc(Result); if Buffer[nCount].usri3_name = Nil then begin if nCount < nTotal then begin Continue; end Else Break; end; ZeroMemory(@lpszStr, SizeOf(lpszStr)); FillSpaces(@lpszStr, 10, True); lstrcatW(lpszStr, Buffer[nCount].usri3_name); Writeln(lpszStr, #13); ZeroMemory(@lpszStr, SizeOf(lpszStr)); FillSpaces(@lpszStr, 15, True); lstrcatW(lpszStr, 'Remarks:'); lstrcatW(lpszStr, Buffer[nCount].usri3_comment); Writeln(lpszStr); ZeroMemory(@lpszStr, SizeOf(lpszStr)); FillSpaces(@lpszStr, 15, True); lstrcatW(lpszStr, 'Privilege:'); if Buffer[nCount].usri3_priv = 0 then begin lstrcatW(lpszStr, 'Guest'); end Else if Buffer[nCount].usri3_priv = 1 then begin lstrcatW(lpszStr, 'User'); end Else if Buffer[nCount].usri3_priv = 2 then begin lstrcatW(lpszStr, 'Admin'); end Else begin lstrcatW(lpszStr, 'UnKnown'); end; Writeln(lpszStr); if (Buffer[nCount].usri3_script_path <> Nil) And (lstrlenW(Buffer[nCount].usri3_script_path) > 0) then begin ZeroMemory(@lpszStr, SizeOf(lpszStr)); FillSpaces(@lpszStr, 15, True); lstrcatW(lpszStr, 'Login Script:'); lstrcatW(lpszStr, Buffer[nCount].usri3_script_path); Writeln(lpszStr); end; Writeln(''); end; end; if Buffer <> Nil then NetApiBufferFree(Buffer); Writeln('.Done!, Total: ', Result); end;