Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   LookupAccountSidW und Datenbereich zu klein (https://www.delphipraxis.net/87917-lookupaccountsidw-und-datenbereich-zu-klein.html)

marabu 7. Mär 2007 13:17

Re: LookupAccountSidW und Datenbereich zu klein
 
Diesen Thread habe ich ganz übersehen, deshalb meine Beiträge im anderen Thread - sorry.

In meinem letzten Beitrag dort hatte ich geschrieben:

Zitat:

Zitat von marabu
... Vermutlich musst du noch die Behandlung der Domänenbezeichnung über TempLen analog NameLen anpassen - ich habe das nicht getestet.

Solange das nicht passiert ist, kann theoretisch auch beim zweiten Aufruf noch BUFFER_TOO_SMALL gemeldet werden.

Freundliche Grüße

Remko 7. Mär 2007 13:19

Re: LookupAccountSidW und Datenbereich zu klein
 
Isn't is meant to work like this (behaviour by design)?

I'm used to doing this (example with LookupAccountName) but behaviour for LookupAccountSid is the same::

Delphi-Quellcode:
  dwSizeSid := 0;
  dwSizeDomain := 0;
  bRes := LookupAccountName(nil, 'Administrator', nil, dwSizeSid, nil, dwSizeDomain, SidType);

  if (not bRes) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then
  begin
    // Reserve memory
    AdminSid := AllocMem(dwSizeSid);
    SetLength(Domain, dwSizeDomain);

    // Lookup Sid from Accountname
    // Assuming that the Admin account has not been renamed!
    bRes := LookUpAccountName(nil, 'Administrator', AdminSid, dwSizeSid, PChar(Domain), dwSizeDomain, SidType);

marabu 7. Mär 2007 13:29

Re: LookupAccountSidW und Datenbereich zu klein
 
Hi Remko,

if you refer to the general mechanism for buffer allocation by calling a function twice - you are right for sure.

With regard to the unassigned domain-name-buffer I would expect the very failure described. Can you comment on this?

Regards

Luckie 7. Mär 2007 13:38

Re: LookupAccountSidW und Datenbereich zu klein
 
Ich habe auch schon das probiert:
Delphi-Quellcode:
TempLen := TempLen + 2;
vor dem zweiten Aufruf, hat aber auch nichts geholfen.

Robert Marquardt 7. Mär 2007 13:41

Re: LookupAccountSidW und Datenbereich zu klein
 
NameLen*sizeOf(WideChar)! Es wird in Chars gezaehlt. Das sind bei einer Unicode-Funktion natuerlich Unicode-Chars.
Meine MSDN Doku sagt "in TCHARs". Das heisst eben das man TCHAR nehmen soll fuer seine Puffer und je nach UNICODE-Einstellung wird TCHAR auf Char oder WideChar gemappt.
Versuch es doch mal mit den jedi-apilib Files. Dort ist dieser Mechanismus ebenfalls implementiert. Ich habe auch mal ein Programm geschrieben das mit beiden UNICODE-Eistellungen fehler- und warnungsfrei kompiliert und laeuft.

himitsu 7. Mär 2007 13:45

Re: LookupAccountSidW und Datenbereich zu klein
 
Zitat:

Delphi-Quellcode:
TempLen := TempLen + 2;

Na ja ... wie wäre es mit * ?

Aber gib es lieber direkt bei GetMem an, oder will SetString das auch in Bytes wissen? :gruebel:

Luckie 7. Mär 2007 13:49

Re: LookupAccountSidW und Datenbereich zu klein
 
Hmpf, man darf bei der Unicode-Version nicht nil bei der Domain übergeben. Übergebe ich dort einen Buffer funktioniert es. :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz