Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Problem mit NetServerGetInfo

  Alt 3. Jun 2005, 13:13
Ich versuche mittels der API Funktion MSDN-Library durchsuchenNetServerGetInfo das Betriebssystem des remote Rechners zu ermitteln. Implementiert habe ich es so:

Delphi-Quellcode:
type
  TSERVER_INFO_101 = packed record
    sv101_platform_ID: DWORD;
    sv101_name: PWChar;
    sv101_version_major: DWORD;
    sv101_version_minor: DWORD;
    sv101_type: DWORD; // not yet defined here!
    sv101_comment: PWChar;
  end;
  PSERVER_INFO_101 = ^TSERVER_INFO_101;
(Die Konstanten für sv101_type habe ich noch nicht definiert, da ich sie erstmal nicht brauche.)
Delphi-Quellcode:
function NetServerGetInfo(const servername: PWChar; level: DWORD; bufptr:
  Pointer): NET_API_STATUS; stdcall;

// ...

function NetServerGetInfo; external netapi32lib name 'NetServerGetInfo';
Aufruf:
Delphi-Quellcode:
function GetRemoteOS(const Computer: WideString; var Version: string): DWORD;
var
  res: DWORD;
  s: string;
  si: Pointer;
  Major: DWORD;
  Minor: DWORD;
resourcestring
  rsUnknown = 'Betriebsystem unbekannt';
begin
  res := 0;
  si := nil;
  s := '';
  res := NetServerGetInfo(PWideChar(Computer), 101, si);
  if res = NERR_Success then
  begin
    Major := PSERVER_INFO_101(si)^.sv101_version_major;
    Minor := PSERVER_INFO_101(si)^.sv101_version_minor;
    if Major = 4 then
      s := 'Windows 95/98/ME'
    else if (Major = 4) and (Minor = 0) then
      s := 'Windows NT 4.0'
    else if (Major = 5) and (Minor = 0) then
      s := 'Windows 2000'
    else if (Major = 5) and (Minor = 1) then
      s := 'Windows XP'
    else if (Major = 5) and (Minor = 2) then
      s := 'Windows 2003 Server Family'
    else
      s := rsUnknown;
    Version := s;
  end;
  NetApiBufferFree(si);
  result := res;
end;
Das Problem: Ich bekomme eine Access Violation nach dem Aufruf der Funktion. NetServerGetInfo gibt übrigens 1241672 zurück.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat