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/)
-   -   Delphi Anzahl von Semaphore-Objekten bestimmen. (https://www.delphipraxis.net/30588-anzahl-von-semaphore-objekten-bestimmen.html)

w3seek 26. Sep 2004 23:14

Re: Anzahl von Semaphore-Objekten bestimmen.
 
Delphi-Quellcode:
const
  SemaphoreBasicInformation = 0;

type
  SEMAPHORE_BASIC_INFORMATION = record
    CurrentCount: Integer;
    MaximumCount: Integer;
  end;
  PSEMAPHORE_BASIC_INFORMATION = ^SEMAPHORE_BASIC_INFORMATION;

function NtQuerySemaphore(SemaphoreHandle: THandle;
                          SemaphoreInformationClass: ULONG;
                          SemaphoreInformation: Pointer;
                          SemaphoreInformationLength: ULONG;
                          ReturnLength: PULONG): Integer; stdcall; external 'ntdll.dll';
function RtlNtStatusToDosError(StatusCode: Integer): DWORD; stdcall; external 'ntdll.dll';

function GetSemaphoreInfo(hSemaphore: THandle; var CurrentCount: Integer; var MaximumCount: Integer): Boolean;
var
  sbi: SEMAPHORE_BASIC_INFORMATION;
  Status: Integer;
begin
  Result := false;
  Status := NtQuerySemaphore(hSemaphore,
                             SemaphoreBasicInformation,
                             @sbi,
                             SizeOf(SEMAPHORE_BASIC_INFORMATION),
                             nil);
  if Status >= 0 then
  begin
    CurrentCount := sbi.CurrentCount;
    MaximumCount := sbi.MaximumCount;
    Result := true;
  end
  else
    SetLastError(RtlNtStatusToDosError(Status));
end;

mirage228 27. Sep 2004 05:59

Re: Anzahl von Semaphore-Objekten bestimmen.
 
Hi,

super :thumb: Danke dir :love:

Ich werds gleich heut Nachmittag ausprobieren :)

mfG
mirage228

Luckie 27. Sep 2004 06:03

Re: Anzahl von Semaphore-Objekten bestimmen.
 
Man sollte nicht auf undokumentierte API Funktionen sein Programm aufbauen. Sie sind nicht umsonst von MS nicht dokumentiert und somit nicht offiziell zur Verwendung frei gegeben. Warum kann man hier nachlesen:
http://weblogs.asp.net/oldnewthing/a.../23/45481.aspx

w3seek 27. Sep 2004 13:51

Re: Anzahl von Semaphore-Objekten bestimmen.
 
Luckie, ich weiss ;) allerdings ist es bei der funktion mehr als unwahrscheinlich (siehe 2. Parameter) - ich bin auch gegen die Benutzung undokumentierter API ;) aber ich benutz den code bzw die Programme die darauf basieren ja nicht ;)

Die meisten Probleme die Raymond Chen anspricht sind wirklich haertere dinge, z.b. dass Programme ein bestimmtes Stack layout erwarten, einfach so im NTFS filesystem rumpfuschen oder absolut undokumentierte interne shell strukturen die sich schon immer staendig geaendert haben. Wie gesagt ich halte es fuer sehr unwahrscheinlich dass diese Funktion geaendert wird da sie mit Sicherheit auch vom ein oder anderen Treiber verwendet wird (ZwQuerySemaphore()).

w3seek 27. Sep 2004 13:58

Re: Anzahl von Semaphore-Objekten bestimmen.
 
Insbesondere nachdem Microsoft endlich NtQueryInformationProcess() und NtQueryInformationThread() dokumentiert hat, da liegt nahe dass die anderen auch in naher Zukunft noch dokumentiert werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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