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; }
NTSTATUS NTAPI SocketsInit() { WSK_CLIENT_NPI WskClient = { 0 }; NTSTATUS Status = STATUS_UNSUCCESSFUL; if (InterlockedCompareExchange(&g_SocketsState, INITIALIZING, DEINITIALIZED) != DEINITIALIZED) return STATUS_ALREADY_REGISTERED; WskClient.ClientContext = NULL; WskClient.Dispatch = &g_WskDispatch; Status = WskRegister(&WskClient, &g_WskRegistration); if (!NT_SUCCESS(Status)) { InterlockedExchange(&g_SocketsState, DEINITIALIZED); return Status; } WDRBD_INFO("WskCaptureProviderNPI start.\n"); Status = WskCaptureProviderNPI(&g_WskRegistration, WSK_INFINITE_WAIT, &g_WskProvider); WDRBD_INFO("WskCaptureProviderNPI done.\n"); // takes long time! msg out after MVL loaded. if (!NT_SUCCESS(Status)) { WDRBD_ERROR("WskCaptureProviderNPI() failed with status 0x%08X\n", Status); WskDeregister(&g_WskRegistration); InterlockedExchange(&g_SocketsState, DEINITIALIZED); return Status; } InterlockedExchange(&g_SocketsState, INITIALIZED); return STATUS_SUCCESS; }
NTSTATUS InitWskEvent() { NTSTATUS status; WSK_CLIENT_NPI wskClientNpi; wskClientNpi.ClientContext = NULL; wskClientNpi.Dispatch = &g_WskDispatch; status = WskRegister(&wskClientNpi, &gWskEventRegistration); if (!NT_SUCCESS(status)) { WDRBD_ERROR("Failed to WskRegister(). status(0x%x)\n", status); return status; } status = WskCaptureProviderNPI(&gWskEventRegistration, WSK_INFINITE_WAIT, &gWskEventProviderNPI); if (!NT_SUCCESS(status)) { WDRBD_ERROR("Failed to WskCaptureProviderNPI(). status(0x%x)\n", status); WskDeregister(&gWskEventRegistration); return status; } return status; }
NTSTATUS NTAPI NPF_WSKStartup( ) { WSK_CLIENT_NPI WskClient = {0}; NTSTATUS Status = STATUS_UNSUCCESSFUL; TRACE_ENTER(); if (InterlockedCompareExchange(&g_SocketsState, INITIALIZING, DEINITIALIZED) != DEINITIALIZED) return STATUS_ALREADY_REGISTERED; WskClient.ClientContext = NULL; WskClient.Dispatch = &g_WskDispatch; Status = WskRegister(&WskClient, &g_WskRegistration); if (!NT_SUCCESS(Status)) { TRACE_MESSAGE1(PACKET_DEBUG_LOUD, "NPF_WSKStartup()::WskRegister() failed with status 0x%08X\n", Status); InterlockedExchange(&g_SocketsState, DEINITIALIZED); TRACE_EXIT(); return Status; } Status = WskCaptureProviderNPI(&g_WskRegistration, WSK_NO_WAIT, &g_WskProvider); if (!NT_SUCCESS(Status)) { TRACE_MESSAGE1(PACKET_DEBUG_LOUD, "NPF_WSKStartup()::WskCaptureProviderNPI() failed with status 0x%08X\n", Status); WskDeregister(&g_WskRegistration); InterlockedExchange(&g_SocketsState, DEINITIALIZED); TRACE_EXIT(); return Status; } InterlockedExchange(&g_SocketsState, INITIALIZED); TRACE_EXIT(); return STATUS_SUCCESS; }