From 97cf5197cf5b882b2c689d8dc2b555f2edf8f418 Mon Sep 17 00:00:00 2001 From: Dave Wilson Date: Tue, 17 Mar 2015 19:50:07 -0700 Subject: Initial publish --- nfp/net/driver/driver.cpp | 150 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 nfp/net/driver/driver.cpp (limited to 'nfp/net/driver/driver.cpp') diff --git a/nfp/net/driver/driver.cpp b/nfp/net/driver/driver.cpp new file mode 100644 index 00000000..2c28f16e --- /dev/null +++ b/nfp/net/driver/driver.cpp @@ -0,0 +1,150 @@ +/*++ + +Copyright (C) Microsoft Corporation, All Rights Reserved. + +Module Name: + + Driver.cpp + +Abstract: + + This module contains the implementation of the UMDF Socketecho Sample's + core driver callback object. + +Environment: + + Windows User-Mode Driver Framework (WUDF) + +--*/ +#include "internal.h" + +#include "driver.tmh" + +DECLARE_TRACING_TLS; + +STDMETHODIMP +CMyDriver::OnInitialize( + _In_ IWDFDriver* /*pWdfDriver*/ + ) + + +/*++ + + Routine Description: + + This routine is invoked by the framework at driver load . + This method will invoke the Winsock Library for using + Winsock API in this driver. + + Arguments: + + pWdfDriver - Framework driver object + + Return Value: + + S_OK if successful, or error otherwise. + +--*/ + +{ + MethodEntry("..."); + + HRESULT hr = S_OK; + + WSADATA wsaData; + int result = WSAStartup(MAKEWORD(2,2), &wsaData); + if (result != 0) + { + hr = HRESULT_FROM_WIN32(WSAGetLastError()); + TraceErrorHR(hr, "Failed to initialize Winsock 2.0"); + } + + MethodReturnHR(hr); +} + +STDMETHODIMP_(void) +CMyDriver::OnDeinitialize( + _In_ IWDFDriver* /*pWdfDriver*/ + ) + +/*++ + Routine Description: + + The FX invokes this method when it unloads the driver. + This routine will Cleanup Winsock library + + Arguments: + + pWdfDriver - the Fx driver object. + + Return Value: + + None + + --*/ +{ + MethodEntry("..."); + + WSACleanup(); + + MethodReturnVoid(); +} + +STDMETHODIMP +CMyDriver::OnDeviceAdd( + _In_ IWDFDriver *FxWdfDriver, + _In_ IWDFDeviceInitialize *FxDeviceInit + ) +/*++ + + Routine Description: + + The FX invokes this method when it wants to install our driver on a device + stack. This method creates a device callback object, then calls the Fx + to create an Fx device object and associate the new callback object with + it. + + Arguments: + + FxWdfDriver - the Fx driver object. + + FxDeviceInit - the initialization information for the device. + + Return Value: + + status + +--*/ +{ + MethodEntry("..."); + + // + // Create a new instance of our device callback object + // + + CComObject * device; + HRESULT hr = CComObject::CreateInstance(&device); + if (SUCCEEDED(hr)) + { + device->AddRef(); + hr = device->Initialize(FxWdfDriver, FxDeviceInit); + if (SUCCEEDED(hr)) + { + // + // If that succeeded then call the device's configure method. This + // allows the device to create any queues or other structures that it + // needs now that the corresponding fx device object has been created. + // + hr = device->Configure(); + } + + // + // Release the reference we took on the device object. + // The framework took its own references on the object's callback interfaces + // when we called FxWdfDriver->CreateDevice, and will manage the object's lifetime. + // + SAFE_RELEASE(device); + } + + MethodReturnHR(hr); +} -- cgit v1.3.1