Freigeben über


WPUCompleteOverlappedRequest-Funktion (ws2spi.h)

Die WPUCompleteOverlappedRequest-Funktion führt überlappende E/A-Vervollständigungsbenachrichtigungen für überlappende E/A-Vorgänge aus.

Syntax

int WPUCompleteOverlappedRequest(
  [in]  SOCKET          s,
  [in]  LPWSAOVERLAPPED lpOverlapped,
  [in]  DWORD           dwError,
  [in]  DWORD           cbTransferred,
  [out] LPINT           lpErrno
);

Die Parameter

[in] s

Der von WPUCreateSocketHandle erstellte DienstanbietersocketHandle.

[in] lpOverlapped

Ein Zeiger auf eine WSAOVERLAPPED-Struktur , die dem überlappenden E/A-Vorgang zugeordnet ist, dessen Abschluss benachrichtigt werden soll.

[in] dwError

Der Abschlussstatus des überlappenden E/A-Vorgangs, dessen Abschluss benachrichtigt werden soll.

[in] cbTransferred

Die Anzahl der an oder von Clientpuffern übertragenen Bytes (die Richtung der Übertragung hängt vom Senden oder Empfangen des überlappenden E/A-Vorgangs ab, dessen Abschluss benachrichtigt werden soll).

[out] lpErrno

Ein Zeiger auf den Fehlercode, der sich aus der Ausführung dieser Funktion ergibt.

Rückgabewert

Wenn kein Fehler auftritt, gibt WPUCompleteOverlappedRequest null zurück und benachrichtigt den Abschluss des überlappenden E/A-Vorgangs entsprechend dem vom Client ausgewählten Mechanismus (signalisiert ein Ereignis in der WSAOVERLAPPED-Struktur , auf die durch lpOverlapped verwiesen wird, und/oder stellt einen Abschlussstatusbericht an den Abschlussport fest, der dem Socket zugeordnet ist, wenn ein Vervollständigungsport zugeordnet ist). Andernfalls gibt WPUCompleteOverlappedRequest SOCKET_ERROR zurück, und ein bestimmter Fehlercode ist in lpErrno verfügbar.

Fehlercode Bedeutung
WSAEINVAL
Der im Parameter s übergebene Socket ist kein Socket, der von WPUCreateSocketHandle erstellt wurde.

Bemerkungen

Die WPUCompleteOverlappedRequest-Funktion führt überlappende E/A-Vervollständigungsbenachrichtigungen für überlappende E/A-Vorgänge aus, bei denen der clientspezifische Vervollständigungsmechanismus etwas anderes als der APC(User Mode-asynchrone Prozeduraufruf) ist. Diese Funktion kann nur für Sockethandles verwendet werden, die von WPUCreateSocketHandle erstellt wurden.

**Hinweis** Diese Funktion unterscheidet sich von anderen Funktionen mit dem Präfix "WPU", da nicht über die Upcall-Tabelle darauf zugegriffen wird. Stattdessen wird sie direkt von Ws2_32.dllexportiert. Dienstanbieter, die diese Funktion aufrufen müssen, sollten eine Verknüpfung mit WS2_32.lib herstellen oder geeignete Betriebssystemfunktionen wie LoadLibrary und GetProcAddress verwenden, um den Funktionszeiger abzurufen.
 
Die Funktion **WPUCompleteOverlappedRequest** wird von Dienstanbietern verwendet, die die Funktion Installable File System (IFS) nicht direkt für die verfügbaren Sockethandles implementieren. Er führt eine Vervollständigungsbenachrichtigung für alle überlappenden E/A-Anforderungen aus, für die die angegebene Vervollständigungsbenachrichtigung nicht ein Benutzermodus-APC ist. **WPUCompleteOverlappedRequest** wird nur für die von WPUCreateSocketHandle erstellten Sockethandle und nicht für Sockets unterstützt, die von einem Dienstanbieter direkt erstellt wurden.

Wenn der Client einen Benutzermodus-APC als Benachrichtigungsmethode auswählt, sollte der Dienstanbieter WPUQueueApc oder eine andere geeignete Betriebssystemfunktion verwenden, um die Abschlussbenachrichtigung auszuführen. Wenn vom Client kein Benutzermodus-APC ausgewählt wird, kann ein Dienstanbieter, der die IFS-Funktionalität nicht direkt implementiert, nicht ermitteln, ob der Client dem Sockethandle einen Abschlussport zugeordnet hat. Daher kann nicht ermittelt werden, ob die Benachrichtigungsmethode für den Abschluss eines Abschlussstatusdatensatzes auf einen Vervollständigungsport oder signalisiert, das in der WSAOVERLAPPED-Struktur gefunden wurde. Die Windows Socket 2-Architektur verfolgt alle Vervollständigungsportzuordnungen mit einem von WPUCreateSocketHandle erstellten Socket und kann eine richtige Entscheidung zwischen abschlussportbasierter Benachrichtigung oder ereignisbasierter Benachrichtigung treffen.

Wenn WPUCompleteOverlappedRequest eine Abschlussanzeige in die Warteschlange stellt, wird das InternalHigh-Element der WSAOVERLAPPED-Struktur auf die Anzahl der übertragenen Bytes festgelegt. Anschließend wird das interne Element auf einen anderen betriebssystemabhängigen Wert als den speziellen Wert WSS_OPERATION_IN_PROGRESS festgelegt. Es kann eine geringfügige Verzögerung geben, nachdem WPUCompleteOverlappedRequest zurückgegeben wird, bevor diese Werte angezeigt werden, da die Verarbeitung asynchron auftreten kann. Der InternalHigh-Wert (Byteanzahl) wird jedoch garantiert festgelegt, wenn " Internal" festgelegt wird.

WPUCompleteOverlappedRequest funktioniert wie angegeben (führt die Abschlussbenachrichtigung wie vom Client angefordert aus), unabhängig davon, ob der Sockethandle einem Abschlussport zugeordnet wurde.

Interaktion mit WSPGetOverlappedResult

Das Verhalten von WPUCompleteOverlappedRequest legt einige Einschränkungen fest, wie ein Dienstanbieter WSPGetOverlappedResult implementiert, da nur die Offset- und OffsetHigh-Member der WSAOVERLAPPED-Struktur ausschließlich vom Dienstanbieter gesteuert werden, aber drei Werte (Byteanzahl, Flags und Fehler) müssen von der Struktur von WSPGetOverlappedResult abgerufen werden. Ein Dienstanbieter kann dies beliebig erreichen, solange er mit dem Verhalten von WPUCompleteOverlappedRequest ordnungsgemäß interagiert . Eine typische Implementierung ist jedoch wie folgt:

  • Zu Beginn der überlappenden Verarbeitung legt der Dienstanbieter "Intern " auf WSS_OPERATION_IN_PROGRESS fest.
  • Wenn der E/A-Vorgang abgeschlossen wurde, legt der Anbieter OffsetHigh auf den Windows Socket 2-Fehlercode fest, der sich aus dem Vorgang ergibt, legt Offset auf die Flags fest, die sich aus dem E/A-Vorgang ergeben, und ruft WPUCompleteOverlappedRequest auf und übergibt die Anzahl der Übertragungsbytes als einen der Parameter. WPUCompleteOverlappedRequest legt " InternalHigh" schließlich auf die Anzahl der Übertragungsbytes fest und legt dann " Internal " auf einen anderen Wert als WSS_OPERATION_IN_PROGRESS fest.
  • Wenn WSPGetOverlappedResult aufgerufen wird, überprüft der Dienstanbieter "Intern". Wenn es WSS_OPERATION_IN_PROGRESS ist, wartet der Anbieter auf das Ereignishandle im hEvent-Element oder gibt einen Fehler basierend auf der Einstellung des FWAIT-Flags von WSPGetOverlappedResult zurück. Wenn nicht in Bearbeitung oder nach Abschluss des Wartens, gibt der Anbieter die Werte von InternalHigh, OffsetHigh und Offset als Übertragungsanzahl, Operation Result Error Code und Flags zurück.

Anforderungen

Anforderung Wert
Mindestens unterstützter Client Windows 2000 Professional [nur Desktop-Apps]
Mindestanforderungen für unterstützte Server Windows 2000 Server [nur Desktop-Apps]
Zielplattform Fenster
Header ws2spi.h
Library mincore.lib

Siehe auch

WPUCreateSocketHandle

WPUQueueApc

WSAOVERLAPPED

WSPGetOverlappedResult