summaryrefslogtreecommitdiff
path: root/sensors/Pedometer/driver.cpp
blob: d9fb3ca26979cdaf8a30e2990755699dd470b2fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//Copyright (C) Microsoft Corporation, All Rights Reserved.
//
//Abstract:
//
//    This module contains the implementation of entry and exit point of pedometer sample driver.
//
//Environment:
//
//   Windows User-Mode Driver Framework (UMDF)

#include "Device.h"
#include "Driver.h"

#include "Driver.tmh"



// This routine is the driver initialization entry point.
NTSTATUS
DriverEntry(
    _In_  PDRIVER_OBJECT  DriverObject, // Pointer to the driver object created by the I/O manager
    _In_  PUNICODE_STRING RegistryPath // Pointer to the driver specific registry key
    )
{
    WDF_DRIVER_CONFIG DriverConfig;
    NTSTATUS Status = STATUS_SUCCESS;

    // Initialize WPP Tracing
    WPP_INIT_TRACING(DriverObject, NULL);

    SENSOR_FunctionEnter();

    DriverConfig.DriverPoolTag = SENSOR_POOL_TAG_PEDOMETER;

    // Initialize the driver configuration structure.
    WDF_DRIVER_CONFIG_INIT(&DriverConfig, PedometerDevice::OnDeviceAdd);
    DriverConfig.EvtDriverUnload = OnDriverUnload;

    // Create a framework driver object to represent our driver.
    Status = WdfDriverCreate(DriverObject,
                             RegistryPath,
                             WDF_NO_OBJECT_ATTRIBUTES,
                             &DriverConfig,
                             WDF_NO_HANDLE);

    if (!NT_SUCCESS(Status))
    {
        TraceError("PED %!FUNC! WdfDriverCreate failed: %!STATUS!", Status);
        goto Exit;
    }

Exit:
    SENSOR_FunctionExit(Status);
    
    return Status;
}



// This routine is called when the driver unloads.
VOID
OnDriverUnload(
    _In_ WDFDRIVER Driver // Driver object
    )
{
    SENSOR_FunctionEnter();

    SENSOR_FunctionExit(STATUS_SUCCESS);

    // WPP_CLEANUP doesn't actually use the Driver parameter
    // So we need to set it as unreferenced.
    UNREFERENCED_PARAMETER(Driver);
    WPP_CLEANUP(WdfDriverWdmGetDriverObject(Driver));

    return;
}