PFN_WSK_CONTROL_SOCKET Rückruffunktion (wsk.h)
Die WskControlSocket--Funktion führt Steuervorgänge für einen Socket aus.
PFN_WSK_CONTROL_SOCKET PfnWskControlSocket;
NTSTATUS PfnWskControlSocket(
[in] PWSK_SOCKET Socket,
[in] WSK_CONTROL_SOCKET_TYPE RequestType,
[in] ULONG ControlCode,
[in] ULONG Level,
[in] SIZE_T InputSize,
[in, optional] PVOID InputBuffer,
[in] SIZE_T OutputSize,
[out, optional] PVOID OutputBuffer,
[out, optional] SIZE_T *OutputSizeReturned,
[in, out] PIRP Irp
)
{...}
[in] Socket
Ein Zeiger auf eine WSK_SOCKET-Struktur, die das Socketobjekt für den Socket angibt, für den der Steuerungsvorgang ausgeführt wird.
[in] RequestType
Ein Wert, der den Typ des auszuführenden Steuerelementvorgangs angibt. Eine WSK-Anwendung legt diesen Parameter auf einen der folgenden Werte fest:
Legen Sie den Status oder wert für eine Socketoption fest.
Rufen Sie den Status oder den Wert einer Socketoption ab.
Führen Sie einen E/A-Steuerungsvorgang aus.
[in] ControlCode
Wenn der parameter RequestType auf WskSetOption oder WskGetOptionfestgelegt ist, gibt der parameter ControlCode die bestimmte Socketoption an, deren Wert festgelegt oder abgerufen wird. Weitere Informationen zu Socketoptionen, die vom WSK-Subsystem unterstützt werden, finden Sie unter WSK Socket Options. Das zugrunde liegende Netzwerkprotokoll unterstützt möglicherweise zusätzliche Socketoptionen.
Wenn der parameter RequestType auf WskIoctlfestgelegt ist, gibt der parameter ControlCode den jeweiligen E/A-Steuerelementvorgang an, der ausgeführt wird. Weitere Informationen zu I/O-Steuerungsvorgängen, die vom WSK-Subsystem unterstützt werden, finden Sie unter WSK Socket IOCTL Operations. Das zugrunde liegende Netzwerkprotokoll unterstützt möglicherweise zusätzliche Socket-E/A-Steuerungsvorgänge.
[in] Level
Die Ebene im Netzwerkstapel, auf der der Wert für eine Socketoption entweder festgelegt oder abgerufen wird. Für Socketoptionen auf WSK-Subsystemebene sollte die WSK-Anwendung diesen Parameter auf SOL_SOCKET festlegen. Für Socketoptionen auf Transportprotokoll- oder Netzwerkprotokollebene sollte die WSK-Anwendung diesen Parameter auf die entsprechende Ebene für den zugrunde liegenden Transport festlegen.
Wenn der parameter RequestType auf WskIoctlfestgelegt ist, wird der parameter Level ignoriert.
[in] InputSize
Die Anzahl der Daten im Puffer, auf die durch den parameter InputBuffer verwiesen wird.
[in, optional] InputBuffer
Ein vom Aufrufer zugewiesener Puffer, der eingabedaten bereitstellt, die zum Ausführen des angegebenen Steuerungsvorgangs erforderlich sind. Wenn für den angegebenen Steuerelementvorgang keine Eingabedaten erforderlich sind, sollte die WSK-Anwendung diesen Parameter auf NULL- festlegen und den InputSize-Parameter auf Null festlegen.
[in] OutputSize
Die Größe des Puffers, auf den der OutputBuffer-Parameter verweist.
[out, optional] OutputBuffer
Ein vom Aufrufer zugewiesener Puffer, der alle Ausgabedaten empfängt, die vom angegebenen Steuerelementvorgang zurückgegeben werden. Wenn vom angegebenen Steuerelementvorgang keine Ausgabedaten zurückgegeben werden, sollte die WSK-Anwendung diesen Parameter auf NULL- festlegen und den OutputSize-Parameter auf Null festlegen.
[out, optional] OutputSizeReturned
Ein Zeiger auf eine ULONG-Typvariable, die die Anzahl der Daten empfängt, die im Puffer zurückgegeben werden, auf den der OutputBuffer-Parameter verweist. Eine WSK-Anwendung sollte den OutputSizeReturned Parameter auf NULL- festlegen, es sei denn, alle folgenden Werte sind wahr:
- Der parameter Irp wird auf NULL-festgelegt.
- Der ausgeführte Vorgang gibt Ausgabedaten im Puffer zurück, auf die vom OutputBuffer Parameter verwiesen wird.
- Die Anzahl der Bytes von Ausgabedaten, die von dem ausgeführten Vorgang zurückgegeben werden, ist unbekannt.
[in, out] Irp
Ein Zeiger auf ein vom Aufrufer zugewiesenes IRP, das vom WSK-Subsystem verwendet wird, um den Steuerungsvorgang asynchron abzuschließen. Weitere Informationen zur Verwendung von IRPs mit WSK-Funktionen finden Sie unter Verwenden von IRPs mit Winsock Kernel Functions.
Wenn der parameter RequestType entweder auf WskSetOption oder WskGetOptionfestgelegt ist, ist der Irp Parameter erforderlich, optional oder muss abhängig von der festgelegten oder abgerufenen Socketoption NULL- sein. Weitere Informationen zu den Anforderungen für den Irp Parameter für jede der unterstützten Socketoptionen finden Sie unter WSK Socket Options.
Wenn der parameter RequestType auf WskIoctlfestgelegt ist, ist der Irp Parameter erforderlich, optional oder muss je nach ausgeführtem E/A-Kontrollvorgang NULL- sein. Weitere Informationen zu den Anforderungen für den Irp--Parameter für jeden der unterstützten E/A-Steuerungsvorgänge finden Sie unter WSK Socket IOCTL Operations.
WskControlSocket gibt einen der folgenden NTSTATUS-Codes zurück:
Rückgabecode | Beschreibung |
---|---|
|
Der Steuerungsvorgang wurde erfolgreich abgeschlossen. Wenn die WSK-Anwendung einen Zeiger auf ein IRP im Irp--Parameter angegeben hat, wird das IRP mit dem Erfolgsstatus abgeschlossen, und die Anzahl der Bytes, die im Puffer zurückgegeben werden, auf den der OutputBuffer Parameter verweist, wird im IoStatus.Information Feld des IRP zurückgegeben. |
|
Das WSK-Subsystem konnte den Kontrollvorgang nicht sofort abschließen. Das WSK-Subsystem schließt das IRP ab, nachdem er den Kontrollvorgang abgeschlossen hat. Der Status des Kontrollvorgangs wird im feld IoStatus.Status des IRP zurückgegeben. Wenn der Vorgang erfolgreich verläuft, wird die Anzahl der Bytes, die im Puffer zurückgegeben werden, auf den der OutputBuffer Parameter verweist, im IoStatus.Information Feld des IRP zurückgegeben. |
|
Das WSK-Subsystem konnte den Kontrollvorgang nicht sofort abschließen. Dieser Wert wird nur zurückgegeben, wenn eine WSK-Anwendung eine Ereignisrückruffunktion für einen Socket deaktiviert, wenn derzeit laufende Aufrufe an diese Ereignisrückruffunktion vorhanden sind und der Irp- Parameter NULL-ist. Weitere Informationen zum Deaktivieren von Ereignisrückruffunktionen finden Sie unter SO_WSK_EVENT_CALLBACK. |
|
Der Socket ist nicht mehr funktionsfähig. Das IRP wird mit dem Fehlerstatus abgeschlossen. Die WSK-Anwendung muss die WskCloseSocket- Funktion aufrufen, um den Socket so schnell wie möglich zu schließen. |
|
Fehler. Das IRP wird mit dem Fehlerstatus abgeschlossen. |
Wenn eine WSK-Anwendung WskSetOption oder WskGetOption- im parameter RequestType angibt, finden Sie unter WSK Socket Options weitere Informationen dazu, wie die Eingabe- und Ausgabepuffer für jede Socketoption verwendet werden.
Wenn eine WSK-Anwendung WskIoctl- im RequestType-Parameter angibt, lesen Sie WSK Socket IOCTL Operations weitere Informationen dazu, wie die Eingabe- und Ausgabepuffer für jeden E/A-Steuerungsvorgang verwendet werden.
Wenn die WskControlSocket--Funktion STATUS_PENDING zurückgibt, müssen alle Puffer, auf die der InputBuffer Parameter verweist, oder der OutputBuffer Parameter gültig bleiben, bis das IRP abgeschlossen ist. Wenn die WSK-Anwendung die Puffer mit einer der ExAllocateXxx--Funktionen zugeordnet hat, kann der Speicher nicht mit der entsprechenden ExFree-Xxx--Funktion freigegeben werden, bis die IRP abgeschlossen ist. Wenn die WSK-Anwendung die Puffer auf dem Stapel zugeordnet hat, kann sie nicht von der Funktion zurückgegeben werden, die die WskControlSocket--Funktion aufruft, bis die IRP abgeschlossen ist.
Aufrufer der WskControlSocket--Funktion müssen bei IRQL <= DISPATCH_LEVEL ausgeführt werden, außer wenn der parameter RequestType auf WskIoctl- festgelegt ist und der ControlCode Parameter auf SIO_ADDRESS_LIST_QUERY, SIO_ADDRESS_LIST_CHANGEoder SIO_ADDRESS_LIST_SORTfestgelegt ist. In diesem Fall müssen Anrufer unter IRQL = PASSIVE_LEVEL ausgeführt werden.
Anforderung | Wert |
---|---|
mindestens unterstützte Client- | Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme. |
Zielplattform- | Universal |
Header- | wsk.h (include Wsk.h) |
IRQL- | <= DISPATCH_LEVEL (siehe Abschnitt "Hinweise") |