Freigeben über


NtCreateNamedPipeFile-Funktion

Erstellt und öffnet das Server-End-Handle der ersten Instanz einer bestimmten Named Pipe oder einer anderen Instanz einer vorhandenen Named Pipe. Die Funktion gibt ein Handle zurück, das für den Zugriff auf die Pipe verwendet werden kann.

Syntax

NTSTATUS NtCreateNamedPipeFile(
  [out]          PHANDLE            FileHandle,
  [in]           ULONG              DesiredAccess,
  [in]           POBJECT_ATTRIBUTES ObjectAttributes,
  [out]          PIO_STATUS_BLOCK   IoStatusBlock,
  [in]           ULONG              ShareAccess,
  [in]           ULONG              CreateDisposition,
  [in]           ULONG              CreateOptions,
  [in]           ULONG              NamedPipeType,
  [in]           ULONG              ReadMode,
  [in]           ULONG              CompletionMode,
  [in]           ULONG              MaximumInstances,
  [in]           ULONG              InboundQuota,
  [in]           ULONG              OutboundQuota,
  [in, optional] PLARGE_INTEGER     DefaultTimeout
);

Parameter

FileHandle [out]

Zeiger auf eine Variable, die das Dateihandle empfängt, wenn der Aufruf erfolgreich ist.

DesiredAccess [in]

Eine Bitmaske von Flags, die den Typ des Zugriffs auf die Datei oder das Verzeichnis angeben, den der Aufrufer benötigt. Dieser Satz systemdefinierter DesiredAccess-Flags bestimmt die folgenden spezifischen Zugriffsrechte für Dateiobjekte.

Flag Beschreibung
DELETE Die Datei kann gelöscht werden.
FILE_READ_DATA Aus der Datei können Daten gelesen werden.
FILE_READ_ATTRIBUTES FileAttributes-Flags, wie unten beschrieben, können gelesen werden.
FILE_READ_EA Erweiterte Attribute (EAs), die der Datei zugeordnet sind, können gelesen werden.
READ_CONTROL Die Zugriffssteuerungsliste (Access Control List, ACL) und die Besitzinformationen, die der Datei zugeordnet sind, können gelesen werden.
FILE_WRITE_DATA In die Datei können Daten geschrieben werden.
FILE_WRITE_ATTRIBUTES FileAttributes-Flags können geschrieben werden.
FILE_WRITE_EA EAs, die der Datei zugeordnet sind, können geschrieben werden.
FILE_APPEND_DATA Daten können an die Datei angefügt werden.
WRITE_DAC Die der Datei zugeordnete DACL (Discretionary Access Control List) kann geschrieben werden.
WRITE_OWNER Besitzerinformationen, die der Datei zugeordnet sind, können geschrieben werden.
SYNCHRONIZE Der Aufrufer kann den Abschluss eines E/A-Vorgangs synchronisieren, indem er darauf wartet, dass der zurückgegebene FileHandle-Wert auf den Signaled-Zustand festgelegt wird. Dieses Flag muss festgelegt werden, wenn das Flag CreateOptionsFILE_SYNCHRONOUS_IO_ALERT oder FILE_SYNCHRONOUS_IO_NONALERT festgelegt ist.
FILE_EXECUTE Daten können mithilfe der System paging-E/A aus der Datei in den Arbeitsspeicher eingelesen werden.

Alternativ können Sie für jedes Dateiobjekt, das kein Verzeichnis darstellt, eines oder mehrere der folgenden generischen ACCESS_MASK-Flags angeben. Die STANDARD_RIGHTS_XXX Flags sind vordefinierte Systemwerte, die zum Erzwingen von Sicherheit für Systemobjekte verwendet werden. Sie können diese generischen Flags auch mit zusätzlichen Flags aus der vorherigen Tabelle kombinieren.

Gewünschter Zugriff auf Dateiwerte Zuordnung zu DesiredAccess-Flags
GENERIC_READ STANDARD_RIGHTS_READ, FILE_READ_DATA, FILE_READ_ATTRIBUTES, FILE_READ_EA, SYNCHRONIZE.
GENERIC_WRITE STANDARD_RIGHTS_WRITE, FILE_WRITE_DATA, FILE_WRITE_ATTRIBUTES, FILE_WRITE_EA, FILE_APPEND_DATA, SYNCHRONIZE.
GENERIC_EXECUTE STANDARD_RIGHTS_EXECUTE, SYNCHRONIZE, FILE_READ_ATTRIBUTES, FILE_EXECUTE.

Für Verzeichnisse (das FILE_DIRECTORY_FILECreateOptions-Flag ist festgelegt) können Sie eines oder mehrere der folgenden ACCESS_MASK-Flags angeben, die Sie auch mit allen kompatiblen Flags kombinieren können, die zuvor beschrieben wurden.

Gewünschter Zugriff auf Verzeichniswerte BESCHREIBUNG
FILE_LIST_DIRECTORY Dateien im Verzeichnis können aufgelistet werden.
FILE_TRAVERSE Das Verzeichnis kann durchquert werden; Das heißt, es kann Teil des Pfadnamens einer Datei sein.

Die FILE_READ_DATAFlags , FILE_WRITE_DATA, FILE_EXECUTEund FILE_APPEND_DATADesiredAccess sind mit dem Erstellen oder Öffnen einer Verzeichnisdatei nicht kompatibel.

ObjectAttributes [in]

Zeiger auf eine OBJECT_ATTRIBUTES Struktur, die bereits von der InitializeObjectAttributes-Routine initialisiert wurde. Wenn der Aufrufer im Systemprozesskontext ausgeführt wird, kann dieser Parameter sein NULL. Andernfalls muss der Aufrufer das OBJ_KERNEL_HANDLE Attribut im Aufruf auf InitializeObjectAttributes festlegen.

Elemente dieser Struktur für ein Dateiobjekt umfassen Folgendes:

Mitglied Wert
ULONG-Länge Die Anzahl der Bytes der angegebenen ObjectAttributes-Daten . Dieser Wert muss mindestens sizeof(OBJECT_ATTRIBUTES)sein.
PUNICODE_STRING ObjectName Zeiger auf eine gepufferte Unicode-Zeichenfolge, die den Namen der zu erstellenden oder zu öffnenden Datei enthält. Dieser Wert muss eine vollqualifizierte Dateispezifikation sein, es sei denn, es handelt sich um den Namen einer Datei relativ zum durch RootDirectory angegebenen Verzeichnis. Beispiel: "\Device\Floppy1\myfile.dat" oder "?? \B:\myfile.dat" kann die vollqualifizierte Dateispezifikation sein, solange der Diskettenlaufwerktreiber und das überladene Dateisystem bereits geladen sind. (Hinweis: "??" ersetzt "\DosDevices" durch den Namen des Win32-Objektnamespace. "\DosDevices" funktioniert weiterhin, aber "??" wird vom Objekt-Manager schneller übersetzt.)
HANDLE RootDirectory Optionales Handle für ein Verzeichnis, das durch einen vorherigen Aufruf von NtCreateNamedPipeFile abgerufen wurde. Wenn dieser Wert NULL ist, muss das ObjectName-Element eine vollqualifizierte Dateispezifikation sein, die den vollständigen Pfad zur Zieldatei enthält. Wenn dieser Wert nicht NULL ist, gibt das ObjectName-Element einen Dateinamen relativ zu diesem Verzeichnis an.
PSECURITY_DESCRIPTOR SecurityDescriptor Optionaler Sicherheitsdeskriptor, der auf eine Datei angewendet werden soll. AcLs, die von einem solchen Sicherheitsdeskriptor angegeben werden, werden nur auf die Datei angewendet, wenn sie erstellt wird. Wenn der Wert NULL ist, wenn eine Datei erstellt wird, ist die in der Datei platzierte ACL dateisystemabhängig. Die meisten Dateisysteme geben einen Teil einer solchen ACL aus der übergeordneten Verzeichnisdatei in Kombination mit der Standard-ACL des Aufrufers weiter.
ULONG-Attribute Ein Satz von Flags, der die Dateiobjektattribute steuert. Wenn der Aufrufer im Systemprozesskontext ausgeführt wird, kann dieser Parameter null sein. Andernfalls muss der Aufrufer das OBJ_KERNEL_HANDLE Flag festlegen. Der Aufrufer kann optional auch das OBJ_CASE_INSENSITIVE Flag festlegen, das angibt, dass Name-Lookup-Code die Groß-/Kleinschreibung von ObjectName ignorieren sollte, anstatt eine Suche nach exakter Übereinstimmung durchzuführen.

IoStatusBlock [out]

Zeiger auf eine Variable vom Typ IO_STATUS_BLOCK , die den endgültigen Abschlussstatus und Informationen zum angeforderten Vorgang empfängt. Bei Rückgabe von NtCreateNamedPipeFile enthält das Information-Element der Variablen einen der folgenden Werte:

  • FILE_CREATED
  • FILE_OPENED
  • FILE_OVERWRITTEN
  • FILE_SUPERSEDED
  • FILE_EXISTS
  • FILE_DOES_NOT_EXIST

ShareAccess [in]

Gibt den Typ des Freigabezugriffs auf die Datei an, den der Aufrufer als null oder 1 oder eine Kombination der folgenden Flags verwenden möchte. Legen Sie diesen Parameter auf Null fest, um exklusiven Zugriff anzufordern. Um Fehler bei der Freigabeverletzung zu vermeiden, geben Sie alle folgenden Freigabezugriffsflags an.

ShareAccess-Flags Beschreibung
FILE_SHARE_READ Die Datei kann für den Lesezugriff durch Dateierstellungsaufrufe anderer Threads geöffnet werden.
FILE_SHARE_WRITE Die Datei kann für den Schreibzugriff durch die Dateierstellungsaufrufe anderer Threads geöffnet werden.
FILE_SHARE_DELETE Die Datei kann für den Löschzugriff durch Die Dateierstellungsaufrufe anderer Threads geöffnet werden.

Gerätetreiber und Zwischentreiber legen ShareAccess in der Regel auf Null fest, was dem Aufrufer exklusiven Zugriff auf die geöffnete Datei gewährt.

CreateDisposition [in]

Wert, der bestimmt, wie die Datei behandelt werden soll, wenn die Datei bereits vorhanden ist. CreateDisposition kann eine der folgenden Elemente sein:

Wert Beschreibung
FILE_SUPERSEDE Wenn die Datei bereits vorhanden ist, ersetzen Sie sie durch die angegebene Datei. Wenn sie nicht vorhanden ist, erstellen Sie die angegebene Datei.
FILE_CREATE Wenn die Datei bereits vorhanden ist, schlägt die Anforderung fehl, und erstellen oder öffnen Sie die angegebene Datei nicht. Wenn sie nicht vorhanden ist, erstellen Sie die angegebene Datei.
FILE_OPEN Wenn die Datei bereits vorhanden ist, öffnen Sie sie, anstatt eine neue Datei zu erstellen. Wenn sie nicht vorhanden ist, schlagen Sie die Anforderung fehl, und erstellen Sie keine neue Datei.
FILE_OPEN_IF Wenn die Datei bereits vorhanden ist, öffnen Sie sie. Wenn sie nicht vorhanden ist, erstellen Sie die angegebene Datei.
FILE_OVERWRITE Wenn die Datei bereits vorhanden ist, öffnen Sie sie, und überschreiben Sie sie. Wenn sie nicht vorhanden ist, schlägt die Anforderung fehl.
FILE_OVERWRITE_IF Wenn die Datei bereits vorhanden ist, öffnen Sie sie, und überschreiben Sie sie. Wenn sie nicht vorhanden ist, erstellen Sie die angegebene Datei.

CreateOptions [in]

Gibt die Optionen an, die beim Erstellen oder Öffnen der Datei angewendet werden sollen, als kompatible Kombination der folgenden Flags.

CreateOptions-Flag Beschreibung
FILE_DIRECTORY_FILE (0x00000001) Die datei, die erstellt oder geöffnet wird, ist eine Verzeichnisdatei. Mit diesem Flag muss der Disposition-Parameter auf einen von FILE_CREATE, FILE_OPENoder FILE_OPEN_IFfestgelegt werden. CreateOptions-Flags , die mit diesem Flag kompatibel sind, sind wie folgt: FILE_SYNCHRONOUS_IO_ALERT, FILE_SYNCHRONOUS_IO_NONALERT, FILE_WRITE_THROUGH, FILE_OPEN_FOR_BACKUP_INTENTund FILE_OPEN_BY_FILE_ID.
FILE_WRITE_THROUGH (0x00000002) Systemdienste, Dateisysteme und Treiber, die Daten in die Datei schreiben, müssen die Daten tatsächlich in die Datei übertragen, bevor ein angeforderter Schreibvorgang als abgeschlossen gilt.
FILE_SEQUENTIAL_ONLY (0x00000004) Alle Zugriffe auf die Datei erfolgen sequenziell.
FILE_NO_INTERMEDIATE_BUFFERING (0x00000008) Die Datei kann nicht in den internen Puffern eines Treibers zwischengespeichert oder gepuffert werden. Dieses Flag ist mit dem DesiredAccess-FlagFILE_APPEND_DATA nicht kompatibel.
FILE_SYNCHRONOUS_IO_ALERT (0x00000010) Alle Vorgänge für die Datei werden synchron ausgeführt. Jede Wartezeit im Namen des Anrufers unterliegt der vorzeitigen Beendigung von Warnungen. Dieses Flag bewirkt auch, dass das E/A-System den Dateipositionskontext behält. Wenn dieses Flag festgelegt ist, muss auch das DesiredAccess-FlagSYNCHRONIZE festgelegt werden, damit der E/A-Manager das Dateiobjekt als Synchronisierungsobjekt verwendet.
FILE_SYNCHRONOUS_IO_NONALERT (0x00000020) Alle Vorgänge für die Datei werden synchron ausgeführt. Wartezeiten im System, um E/A-Warteschlangen und Vervollständigung zu synchronisieren, unterliegen keinen Warnungen. Dieses Flag bewirkt auch, dass das E/A-System den Dateipositionskontext behält. Wenn dieses Flag festgelegt ist, muss auch das DesiredAccess-FlagSYNCHRONIZE festgelegt werden, damit der E/A-Manager das Dateiobjekt als Synchronisierungsobjekt verwendet.
FILE_NON_DIRECTORY_FILE (0x00000040) Die geöffnete Datei darf keine Verzeichnisdatei sein, andernfalls schlägt dieser Aufruf fehl. Das geöffnete Dateiobjekt kann eine Datendatei darstellen. ein logisches, virtuelles oder physisches Gerät; oder ein Volume.
FILE_CREATE_TREE_CONNECTION (0x00000080) Erstellen Sie eine Strukturverbindung für diese Datei, um sie über das Netzwerk zu öffnen.
FILE_COMPLETE_IF_OPLOCKED (0x00000100) Schließen Sie diesen Vorgang sofort mit einem alternativen Erfolgscode ab, wenn die Zieldatei oplocked ist, anstatt den Thread des Aufrufers zu blockieren. Wenn die Datei oplocked ist, hat ein anderer Aufrufer bereits über das Netzwerk Zugriff auf die Datei.
FILE_NO_EA_KNOWLEDGE (0x00000200) Wenn die erweiterten Attribute einer vorhandenen Datei, die geöffnet wird, angeben, dass der Aufrufer erweiterte Attribute verstehen muss, um die Datei ordnungsgemäß zu interpretieren, schlägt diese Anforderung fehl, da der Aufrufer nicht versteht, wie mit erweiterten Attributen umgegangen werden soll.
FILE_OPEN_REMOTE_INSTANCE (0x00000400) Für die Systemnutzung reserviert; nicht verwenden.
FILE_RANDOM_ACCESS (0x00000800) Zugriffe auf die Datei können zufällig sein, sodass keine sequenziellen Read-Ahead-Vorgänge für die Datei von Dateisystemen oder dem Betriebssystem ausgeführt werden sollten.
FILE_DELETE_ON_CLOSE (0x00001000) Löschen Sie die Datei, wenn das letzte Handle an FltClose übergeben wird.
FILE_OPEN_BY_FILE_ID (0x00002000) Die Datei wird per ID geöffnet. Der Dateiname enthält den Namen eines Geräts und eine 64-Bit-ID, die zum Öffnen der Datei verwendet werden soll.
FILE_OPEN_FOR_BACKUP_INTENT (0x000004000) Die Datei wird für die Sicherungsabsicht geöffnet. Daher sollte das System bestimmte Zugriffsrechte überprüfen und dem Aufrufer die entsprechenden Zugriffe auf die Datei gewähren, bevor die Eingabe DesiredAccess mit dem Sicherheitsdeskriptor der Datei überprüft wird.
FILE_NO_COMPRESSION (0x00008000) Unterdrücken der Vererbung von FILE_ATTRIBUTE_COMPRESSED aus dem übergeordneten Verzeichnis. Dies ermöglicht das Erstellen einer nicht komprimierten Datei in einem Verzeichnis, das komprimiert markiert ist.
FILE_OPEN_REQUIRING_OPLOCK (0x00010000) Die Datei wird geöffnet, und eine opportunistische Sperre (Oplock) für die Datei wird als einzelner atomarer Vorgang angefordert. Das Dateisystem überprüft auf Oplocks, bevor es den Erstellungsvorgang ausführt, und der Erstellungsvorgang schlägt mit dem Rückgabecode STATUS_CANNOT_BREAK_OPLOCK fehl, wenn der Erstellungsvorgang einen vorhandenen Oplock unterbrechen würde. Dieses Flag ist in Windows 7, Windows Server 2008 R2 und höheren Windows-Betriebssystemen verfügbar.
FILE_DISALLOW_EXCLUSIVE (0x00020000) Wenn beim Öffnen einer vorhandenen Datei FILE_SHARE_READ nicht angegeben ist und die Dateisystemzugriffsüberprüfungen dem Aufrufer keinen Schreibzugriff auf die Datei gewähren würden, schlägt dieses Öffnen mit STATUS_ACCESS_DENIEDfehl. Dies war das Standardverhalten vor Windows 7.
FILE_SESSION_AWARE (0x00040000) Die Datei oder das Gerät wird mit Sitzungsbewusstsein geöffnet. Wenn dieses Flag nicht angegeben ist, können Geräte pro Sitzung (z. B. ein Gerät mit RemoteFX USB-Umleitung) nicht von Prozessen geöffnet werden, die in Sitzung 0 ausgeführt werden. Dieses Flag hat keine Auswirkung auf Anrufer, die sich nicht in Sitzung 0 befinden. Dieses Flag wird nur in Servereditionen von Windows unterstützt. Dieses Flag wird vor Windows Server 2012 nicht unterstützt.
FILE_RESERVE_OPFILTER (0x00100000) Dieses Flag ermöglicht es einer Anwendung, eine opportunistische Filtersperre (oplock) anzufordern, um zu verhindern, dass andere Anwendungen Freigabeverletzungen erhalten. Wenn bereits geöffnete Handles vorhanden sind, schlägt die Erstellungsanforderung mit STATUS_OPLOCK_NOT_GRANTEDfehl.
FILE_OPEN_REPARSE_POINT (0x00200000) Öffnen Sie eine Datei mit einem Analysepunkt, und umgehen Sie die normale Analysepunktverarbeitung für die Datei. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".
FILE_OPEN_NO_RECALL (0x00400000) Weist filter, die Offlinespeicher oder Virtualisierung ausführen, an, den Inhalt der Datei nicht als Ergebnis dieses Öffnens zurückzurufen.
FILE_OPEN_FOR_FREE_SPACE_QUERY (0x00800000) Dieses Flag weist das Dateisystem an, den Benutzer zu erfassen, der dem aufrufenden Thread zugeordnet ist. Alle nachfolgenden Aufrufe von FltQueryVolumeInformation oder ZwQueryVolumeInformationFile , die das zurückgegebene Handle verwenden, gehen von dem erfassten Benutzer und nicht vom aufrufenden Benutzer zu diesem Zeitpunkt aus, um den für den Aufrufer verfügbaren freien Speicherplatz zu berechnen. Dies gilt für die folgenden FsInformationClass-Werte : FileFsSizeInformation, FileFsFullSizeInformationund FileFsFullSizeInformationEx.

NamedPipeType [in]

Typ der zu erstellenden benannten Pipe (Bytetyp oder Nachrichtentyp).

ReadMode [in]

Modus zum Lesen der Pipe (Bytetyp oder Nachrichtentyp).

CompletionMode [in]

Gibt an, wie der Vorgang abgeschlossen werden soll.

MaximumInstances [in]

Maximale Anzahl gleichzeitiger Instanzen der benannten Pipe.

InboundQuota [in]

Gibt das Poolkontingent an, das für Schreibvorgänge in die eingehende Seite der benannten Pipe reserviert ist.

OutboundQuota [in]

Gibt das Poolkontingent an, das für Schreibvorgänge in die eingehende Seite der benannten Pipe reserviert ist.

DefaultTimeout [in, optional]

Ein optionaler Zeiger auf einen Timeoutwert, der verwendet wird, wenn beim Warten auf eine Instanz einer benannten Pipe kein Timeoutwert angegeben wird.

Gibt zurück

Der Funktionswert ist der endgültige Status des Create/Open-Vorgangs.

Hinweise

Um eine Instanz einer Named Pipe zu erstellen, muss der Benutzer FILE_CREATE_PIPE_INSTANCE Zugriff auf das Named Pipe-Objekt haben. Wenn eine neue Named Pipe erstellt wird, definiert die Zugriffssteuerungsliste (Access Control List, ACL) aus dem Parameter "Sicherheitsattribute" die diskretionäre Zugriffssteuerung für die benannte Pipe.

Alle Instanzen einer benannten Pipe müssen den gleichen Pipetyp (Bytetyp oder Nachrichtentyp), den Pipezugriff (Duplex, eingehende oder ausgehende), die Instanzanzahl und denselben Timeoutwert angeben. Wenn unterschiedliche Werte verwendet werden, schlägt diese Funktion fehl, und GetLastError gibt ERROR_ACCESS_DENIED zurück.

Ein Clientprozess stellt mithilfe der Funktion CreateFile oder CallNamedPipe eine Verbindung mit einer benannten Pipe her. Die Clientseite einer benannten Pipe beginnt im Bytemodus, auch wenn sich die Serverseite im Nachrichtenmodus befindet. Um Probleme beim Empfang von Daten zu vermeiden, legen Sie auch die Clientseite auf den Nachrichtenmodus fest. Um den Modus der Pipe zu ändern, muss der Pipeclient eine schreibgeschützte Pipe mit GENERIC_READ und FILE_WRITE_ATTRIBUTES Zugriff öffnen.

Der Pipeserver sollte erst dann einen blockierenden Lesevorgang ausführen, wenn der Pipeclient gestartet wurde. Andernfalls kann eine Racebedingung auftreten. Dies tritt in der Regel auf, wenn Initialisierungscode, z. B. die C-Laufzeit, geerbte Handles sperren und untersuchen muss.

Jedes Mal, wenn eine Named Pipe erstellt wird, erstellt das System die eingehenden und/oder ausgehenden Puffer mithilfe eines nicht auslagerten Pools, d. h. des physischen Arbeitsspeichers, der vom Kernel verwendet wird. Die Anzahl der Pipeinstanzen (sowie Objekte wie Threads und Prozesse), die Sie erstellen können, wird durch den verfügbaren nicht auslagerten Pool begrenzt. Jede Lese- oder Schreibanforderung erfordert Speicherplatz im Puffer für die Lese- oder Schreibdaten sowie zusätzlichen Speicherplatz für die internen Datenstrukturen.

Die Größen des Eingabe- und Ausgabepuffers sind beratend. Die tatsächliche Puffergröße, die für jedes Ende der benannten Pipe reserviert ist, ist entweder der Systemstandard, das Systemminimum oder das Maximum des Systems oder die angegebene Größe, die auf die nächste Zuordnungsgrenze aufgerundet wird. Die angegebene Puffergröße sollte klein genug sein, dass ihr Prozess nicht aus dem Nicht-Auslagerpool ausgeht, sondern groß genug ist, um typische Anforderungen zu erfüllen.

Wenn ein Pipeschreibvorgang ausgeführt wird, versucht das System zuerst, den Arbeitsspeicher auf das Pipeschreibkontingent aufzuladen. Wenn das verbleibende Pipeschreibkontingent ausreicht, um die Anforderung zu erfüllen, wird der Schreibvorgang sofort abgeschlossen. Wenn das verbleibende Pipeschreibkontingent zu klein ist, um die Anforderung zu erfüllen, versucht das System, die Puffer zu erweitern, um die Daten mithilfe eines für den Prozess reservierten nicht auslagerten Pools aufzunehmen. Der Schreibvorgang wird blockiert, bis die Daten aus der Pipe gelesen werden, sodass das zusätzliche Pufferkontingent freigegeben werden kann. Wenn die angegebene Puffergröße zu klein ist, vergrößert das System den Puffer nach Bedarf, aber der Nachteil ist, dass der Vorgang blockiert wird. Wenn der Vorgang überlappend ist, wird ein Systemthread blockiert. andernfalls wird der Anwendungsthread blockiert.

Um Ressourcen freizugeben, die von einer benannten Pipe verwendet werden, sollte die Anwendung Handles immer schließen, wenn sie nicht mehr benötigt werden. Dies geschieht entweder durch aufrufen der CloseHandle-Funktion oder wenn der der Instanz zugeordnete Prozess beendet wird. Beachten Sie, dass einer Instanz einer Named Pipe möglicherweise mehr als ein Handle zugeordnet ist. Eine Instanz einer benannten Pipe wird immer gelöscht, wenn das letzte Handle für die Instanz der benannten Pipe geschlossen wird.

Anforderungen

Anforderung Wert
Header ntioapi.h
Bibliothek ntdll.lib