Subversion Repositories userdetect2

Rev

Rev 81 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 81 Rev 82
Line 10... Line 10...
10
 
10
 
11
function GetUserName: string;
11
function GetUserName: string;
12
function GetComputerName: string;
12
function GetComputerName: string;
13
function ExpandEnvironmentStrings(ATemplate: string): string;
13
function ExpandEnvironmentStrings(ATemplate: string): string;
14
function GetHomeDir: string;
14
function GetHomeDir: string;
15
function GetComputerSID: string;
-
 
16
procedure EnvironmentStringsToStrings(outSL: TStrings);
15
procedure EnvironmentStringsToStrings(outSL: TStrings);
-
 
16
function GetPlatformID: integer;
17
 
17
 
18
implementation
18
implementation
19
 
19
 
20
function GetHomeDir: string;
20
function GetHomeDir: string;
21
var
21
var
Line 40... Line 40...
40
    end;
40
    end;
41
  end;
41
  end;
42
end;
42
end;
43
 
43
 
44
function GetComputerName: string;
44
function GetComputerName: string;
45
// http://www.delphi-treff.de/tipps-tricks/netzwerkinternet/netzwerkeigenschaften/computernamen-des-eigenen-rechners-ermitteln/
45
// Source: http://www.delphi-treff.de/tipps-tricks/netzwerkinternet/netzwerkeigenschaften/computernamen-des-eigenen-rechners-ermitteln/
46
var
46
var
47
  Len: DWORD;
47
  Len: DWORD;
48
begin
48
begin
49
  Len := MAX_COMPUTERNAME_LENGTH+1;
49
  Len := MAX_COMPUTERNAME_LENGTH+1;
50
  SetLength(Result,Len);
50
  SetLength(Result,Len);
Line 63... Line 63...
63
  ZeroMemory(@buffer, size);
63
  ZeroMemory(@buffer, size);
64
  Windows.ExpandEnvironmentStrings(PChar(ATemplate), buffer, size);
64
  Windows.ExpandEnvironmentStrings(PChar(ATemplate), buffer, size);
65
  SetString(result, buffer, lstrlen(buffer));
65
  SetString(result, buffer, lstrlen(buffer));
66
end;
66
end;
67
 
67
 
68
 
-
 
69
 
-
 
70
// --- http://stackoverflow.com/a/7643383 ---
-
 
71
 
-
 
72
function ConvertSidToStringSid(Sid: PSID; out StringSid: PChar): BOOL; stdcall;
-
 
73
  external 'ADVAPI32.DLL' name {$IFDEF UNICODE} 'ConvertSidToStringSidW'{$ELSE} 'ConvertSidToStringSidA'{$ENDIF};
-
 
74
 
-
 
75
function SIDToString(ASID: PSID): string;
-
 
76
var
-
 
77
  StringSid : PChar;
-
 
78
begin
-
 
79
  ConvertSidToStringSid(ASID, StringSid);
-
 
80
  Result := string(StringSid);
-
 
81
end;
-
 
82
 
-
 
83
function GetComputerSID:string;
-
 
84
var
-
 
85
  Sid: PSID;
-
 
86
  cbSid: DWORD;
-
 
87
  cbReferencedDomainName : DWORD;
-
 
88
  ReferencedDomainName: string;
-
 
89
  peUse: SID_NAME_USE;
-
 
90
  Success: BOOL;
-
 
91
  lpSystemName : string;
-
 
92
  lpAccountName: string;
-
 
93
begin
-
 
94
  Sid:=nil;
-
 
95
  try
-
 
96
    lpSystemName:='';
-
 
97
    lpAccountName:=GetComputerName;
-
 
98
 
-
 
99
    cbSid := 0;
-
 
100
    cbReferencedDomainName := 0;
-
 
101
    // First call to LookupAccountName to get the buffer sizes.
-
 
102
    Success := LookupAccountName(PChar(lpSystemName), PChar(lpAccountName), nil, cbSid, nil, cbReferencedDomainName, peUse);
-
 
103
    if (not Success) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
-
 
104
    begin
-
 
105
      SetLength(ReferencedDomainName, cbReferencedDomainName);
-
 
106
      Sid := AllocMem(cbSid);
-
 
107
      // Second call to LookupAccountName to get the SID.
-
 
108
      Success := LookupAccountName(PChar(lpSystemName), PChar(lpAccountName), Sid, cbSid, PChar(ReferencedDomainName), cbReferencedDomainName, peUse);
-
 
109
      if not Success then
-
 
110
      begin
-
 
111
        FreeMem(Sid);
-
 
112
        Sid := nil;
-
 
113
        RaiseLastOSError;
-
 
114
      end
-
 
115
      else
-
 
116
        Result := SIDToString(Sid);
-
 
117
    end
-
 
118
    else
-
 
119
      RaiseLastOSError;
-
 
120
  finally
-
 
121
    if Assigned(Sid) then
-
 
122
     FreeMem(Sid);
-
 
123
  end;
-
 
124
end;
-
 
125
 
-
 
126
procedure EnvironmentStringsToStrings(outSL: TStrings);
68
procedure EnvironmentStringsToStrings(outSL: TStrings);
127
var
69
var
128
  DosEnv: PChar;
70
  DosEnv: PChar;
129
begin
71
begin
130
  DosEnv := GetEnvironmentStrings;
72
  DosEnv := GetEnvironmentStrings;
Line 148... Line 90...
148
  ZeroMemory(@buffer, size);
90
  ZeroMemory(@buffer, size);
149
  Windows.GetUserName(buffer, size);
91
  Windows.GetUserName(buffer, size);
150
  SetString(result, buffer, lstrlen(buffer));
92
  SetString(result, buffer, lstrlen(buffer));
151
end;
93
end;
152
 
94
 
-
 
95
function GetPlatformID: integer;
-
 
96
var
-
 
97
  OSVersionInfo: TOSVersionInfo;
-
 
98
begin
-
 
99
  OSVersionInfo.dwOSVersionInfoSize := SizeOf(OSVersionInfo);
-
 
100
  GetVersionEx(OSVersionInfo);
-
 
101
  result := OSVersionInfo.dwPlatformID;
-
 
102
end;
-
 
103
 
153
end.
104
end.