NTSTATUS initwsk(PWSK_REGISTRATION clireg, PWSK_PROVIDER_NPI pronpi) { NTSTATUS status; WSK_CLIENT_NPI clinpi; WSK_CLIENT_DISPATCH dispatch = { MAKE_WSK_VERSION(1, 0), 0, NULL }; clinpi.ClientContext = NULL; clinpi.Dispatch = &dispatch; status = WskRegister(&clinpi, clireg); if(!NT_SUCCESS(status)){ DbgPrint("WskRegister() error : 0x%X\n", status); return status; } status = WskCaptureProviderNPI(clireg, WSK_INFINITE_WAIT, pronpi); if(!NT_SUCCESS(status)){ DbgPrint("WskCaptureProviderNPI() error : 0x%X\n", status); WskDeregister(clireg); return status; } return STATUS_SUCCESS; }
#include "drbd_windows.h" #include "wsk2.h" extern bool drbd_stream_send_timed_out(struct drbd_transport *transport, enum drbd_stream stream); WSK_REGISTRATION g_WskRegistration; static WSK_PROVIDER_NPI g_WskProvider; static WSK_CLIENT_DISPATCH g_WskDispatch = { MAKE_WSK_VERSION(1, 0), 0, NULL }; LONG g_SocketsState = DEINITIALIZED; NTSTATUS NTAPI CompletionRoutine( __in PDEVICE_OBJECT DeviceObject, __in PIRP Irp, __in PKEVENT CompletionEvent ) { ASSERT(CompletionEvent); KeSetEvent(CompletionEvent, IO_NO_INCREMENT, FALSE); return STATUS_MORE_PROCESSING_REQUIRED; } NTSTATUS InitWskData( __out PIRP* pIrp, __out PKEVENT CompletionEvent ) { ASSERT(pIrp); ASSERT(CompletionEvent);