Sample Code
windows driver samples/ Near-Field Proximity Sample Driver (UMDF Version 1)/ C++/ driver/ driver.cpp/
/*++
 
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);
}
            Our Services
- 
          
What our customers say about us?
 Read our customer testimonials to find out why our clients keep returning for their projects.
View Testimonials 
 
