summaryrefslogtreecommitdiff
path: root/nfp/net/driver/driver.cpp
diff options
context:
space:
mode:
authorDave Wilson <[email protected]>2015-03-17 19:50:07 -0700
committerDave Wilson <[email protected]>2015-03-17 19:50:07 -0700
commit97cf5197cf5b882b2c689d8dc2b555f2edf8f418 (patch)
tree46f3701832d70b420eb0fc0eb93261f9da45db3f /nfp/net/driver/driver.cpp
parentef1905bf1e8825bb31120dfb27e0daf3154d859a (diff)
Initial publish
Diffstat (limited to 'nfp/net/driver/driver.cpp')
-rw-r--r--nfp/net/driver/driver.cpp150
1 files changed, 150 insertions, 0 deletions
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<CMyDevice> * device;
+ HRESULT hr = CComObject<CMyDevice>::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);
+}