none
storage filter Driver RRS feed

  • Question

  • Hi

    Could you please guide me with a storage filter driver both inf file and c

    Thanks, Arun Ayachith

    Friday, December 20, 2019 9:23 AM

All replies

  • Well the first question is at what level are you wanting to deal with storage?  I think of a storage filter as a disk filter where you deal with the raw blocks of a physical disk.  I have had customers who want to deal with logical disks, or even with files.   These levels are all different, so tell us what are you trying to do.


    Don Burn Windows Driver Consulting Website: http://www.windrvr.com

    Friday, December 20, 2019 12:20 PM
  • Thanks for the reply,

    I would like to get storage filter working at "disk/Volume" level dealing with raw blocks of physical disks. I am able to get FileSystem minifilter working.

    I have used sample code from Visual Studio, KMDF which creates Driver/Device/Queue files.

    I am trying to modify the inf as follows.

    ;;==============================================

    ;
    ; KMDF_A1.inf
    ;
    [Version]
    Signature="$WINDOWS NT$"
    ;Class=Sample ; TODO: edit Class
    ;ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ; TODO: edit ClassGuid
    ;Class = Volume
    ;ClassGuid = {71a27cdd-812a-11d0-bec7-08002be2092f}
    Class = DiskDrive
    ClassGuid = {4d36e967-e325-11ce-bfc1-08002be10318}
    ;Class = Extension
    ;ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
    ;Class = Keyboard
    ;ClassGuid = {4d36e96b-e325-11ce-bfc1-08002be10318}
    Provider=%ManufacturerName%
    CatalogFile=KMDF_A1.cat
    DriverVer= 12-12-2019; TODO: set DriverVer in stampinf property pages
    [DestinationDirs]
    DefaultDestDir = 12
    KMDF_A1_Device_CoInstaller_CopyFiles = 11

    ;*****************************************
    ; Install Section
    ;*****************************************
    [Manufacturer]
    ;%ManufacturerName%=Standard,NT$ARCH$
    ;%ManufacturerName%=Standard
    ;[KMDF_A1_install.HW]
    [KMDF_A1_inst]
    AddReg=KMDF_A1_addreg
    [KMDF_A1_addreg]
    HKR,,"UpperFilters",0x0001000A,"KMDF_A1" ; REG_MULTI_SZ value

    ; -------------- KMDF_A1 driver install sections
    [KMDF_A1_Service_Inst]
    DisplayName    = %KMDF_A1.SVCDESC%
    ServiceType    = 1               ; SERVICE_KERNEL_DRIVER
    StartType      = 1               ; SERVICE_DEMAND_START
    ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
    ServiceBinary  = %12%\KMDF_A1.sys

    [Strings]
    SPSVCINST_ASSOCSERVICE= 0x00000002
    ManufacturerName="ShasRaTech-VRD" ;TODO: Replace with your manufacturer name
    ClassName="KMDF_A1" ; TODO: edit ClassName
    DiskName = "KMDF_A1 Installation Disk"
    KMDF_A1.DeviceDesc = "KMDF_A1 Device"
    KMDF_A1.SVCDESC = "KMDF_A1 Service"

    ;;=======================================================

    the driver gets installed, but when I try to start the driver, it gives me the following error.
    =============================

    The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.

    =============================

    Please help me, to understand what error I am doing.

    Thanks, Arun Ayachith.

    Friday, December 20, 2019 7:57 PM
  • Enable SetupAPILogging https://docs.microsoft.com/en-us/windows-hardware/drivers/install/setupapi-logging--windows-vista-and-later- 

    Look at what it gives you.  If you can't figure it out post the section where your driver is being installed.


    Don Burn Windows Driver Consulting Website: http://www.windrvr.com



    Friday, December 20, 2019 9:04 PM
  • Thanks for your time,

    Here are the logs. It says success, but nothing happens.

    [Device Install Log]
         OS Version = 10.0.14393
         Service Pack = 0.0
         Suite = 0x0110
         ProductType = 3
         Architecture = amd64

    [BeginLog]

    [Boot Session: 2019/12/21 07:34:16.486]

    >>>  [Device Install (DiInstallDriver) - C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf]
    >>>  Section start 2019/12/21 07:37:49.749
          cmd: "C:\Windows\System32\InfDefaultInstall.exe" "C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf"
         ndv: Flags: 0x00000000
         ndv: INF path: C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf
         inf: {SetupCopyOEMInf: C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf} 07:37:49.749
         inf:      Copy style: 0x00000000
    !    inf:      Driver package is already in driver store
         inf:      Driver Store Path: C:\Windows\System32\DriverStore\FileRepository\kmdf_a1.inf_amd64_e702c6c50db8e536\kmdf_a1.inf
         inf:      Published Inf Path: C:\Windows\INF\oem17.inf
         inf:      OEM source media location: C:\Users\Administrator\Desktop\KMDF_A1\
         inf: {SetupCopyOEMInf exit (0x00000000)} 07:37:49.749
         inf: Opened INF: 'C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf' ([strings])
    <<<  Section end 2019/12/21 07:37:49.772
    <<<  [Exit status: SUCCESS]


    [Boot Session: 2019/12/21 07:38:22.488]

    >>>  [Device Install (DiInstallDriver) - C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf]
    >>>  Section start 2019/12/21 07:38:48.143
          cmd: "C:\Windows\System32\InfDefaultInstall.exe" "C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf"
         ndv: Flags: 0x00000000
         ndv: INF path: C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf
         inf: {SetupCopyOEMInf: C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf} 07:38:48.159
         inf:      Copy style: 0x00000000
    !    inf:      Driver package is already in driver store
         inf:      Driver Store Path: C:\Windows\System32\DriverStore\FileRepository\kmdf_a1.inf_amd64_e702c6c50db8e536\kmdf_a1.inf
         inf:      Published Inf Path: C:\Windows\INF\oem17.inf
         inf:      OEM source media location: C:\Users\Administrator\Desktop\KMDF_A1\
         inf: {SetupCopyOEMInf exit (0x00000000)} 07:38:48.174
         inf: Opened INF: 'C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf' ([strings])
    <<<  Section end 2019/12/21 07:38:48.190
    <<<  [Exit status: SUCCESS]


    >>>  [Device Install (DiInstallDriver) - C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf]
    >>>  Section start 2019/12/21 07:39:21.378
          cmd: "C:\Windows\System32\InfDefaultInstall.exe" "C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf"
         ndv: Flags: 0x00000000
         ndv: INF path: C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf
         inf: {SetupCopyOEMInf: C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf} 07:39:21.394
         inf:      Copy style: 0x00000000
    !    inf:      Driver package is already in driver store
         inf:      Driver Store Path: C:\Windows\System32\DriverStore\FileRepository\kmdf_a1.inf_amd64_e702c6c50db8e536\kmdf_a1.inf
         inf:      Published Inf Path: C:\Windows\INF\oem17.inf
         inf:      OEM source media location: C:\Users\Administrator\Desktop\KMDF_A1\
         inf: {SetupCopyOEMInf exit (0x00000000)} 07:39:21.394
         inf: Opened INF: 'C:\Users\Administrator\Desktop\KMDF_A1\KMDF_A1.inf' ([strings])
    <<<  Section end 2019/12/21 07:39:21.394
    <<<  [Exit status: SUCCESS]

    Please let me know how to proceed further.

    Thanks again.
    Arun Ayachith

    Saturday, December 21, 2019 2:12 AM
  • I have set the LogLevel to 0x00007070 and No LogMask.
    Saturday, December 21, 2019 2:22 AM
  • Looking at your INF file you need to make this an upper filter driver with something like:

    [XXX.AddReg]
    HKLM, System\CurrentControlSet\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318}, UpperFilters, 0x00010008, KMDF_A1

    Additionally, disks are started at BOOT so change the StartType to 0.

    Finally, make sure your driver code is based on a filter sample.


    Don Burn Windows Driver Consulting Website: http://www.windrvr.com

    Saturday, December 21, 2019 2:18 PM
  • Thanks for your reply.

    I still have the same problem after changing the lines like this.
    [KMDF_A1_addreg] 
    HKLM, System\CurrentControlSet\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318}, UpperFilters, 0x00010008, KMDF_A1

    and 

    StartType      = 0               ; SERVICE_BOOT_START

    I am using sample from KMDF only.

    Also, I rebooted the system, it didn't work. I tried on VirtualBox/Laptop its not working, I tried with kbfiltr/moufiltr, same result.

    "The Service cannot be started, either because it is disabled or because it has no enabled devices associated with it. 

    I am not sure what i am missing, its seems problem should have been solved by this time.

    could you please let me know 

    a] Should we be attaching a device in a filter or not?

    b] Should AddDevice be called automatically or not?

    c] I am seeing the Driver getting loaded automatically [with start type = 0,boot, as expected] but no call to AddDevice.

    I am attaching my inf and Driver.c code from KMDF. Please help me.

    //==================================

    ;
    ; KMDF_A1.inf
    ;

    [Version]
    Signature="$WINDOWS NT$"
    Class = DiskDrive
    ClassGuid = {4d36e967-e325-11ce-bfc1-08002be10318}

    Provider=%ManufacturerName%
    CatalogFile=KMDF_A1.cat
    DriverVer= 12-12-2019; TODO: set DriverVer in stampinf property pages

    [DestinationDirs]
    KMDF_A1_copyfiles=12
    DefaultDestDir = 12
    KMDF_A1_Device_CoInstaller_CopyFiles = 11

    ; ================= Class section =====================

    ;[ClassInstall32]
    ;Addreg=SampleClassReg

    ;[SampleClassReg]
    ;HKR,,,0,%ClassName%
    ;HKR,,Icon,,-5

    [SourceDisksNames]
    1 = %DiskName%,,,""

    [SourceDisksFiles]
    KMDF_A1.sys  = 1,,
    WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll=1 ; make sure the number matches with SourceDisksNames

    ;*****************************************
    ; Install Section
    ;*****************************************

    [Manufacturer]
    %ManufacturerName%=Standard,NT$ARCH$

    [Standard.NT$ARCH$]
    %KMDF_A1.DeviceDesc%=KMDF_A1_Device, *PNP0BAAD ; TODO: edit hw-id <<=== I have remove ,*PNP0BAAD, but not sure what to add there?

    [KMDF_A1_Device.NT]
    CopyFiles=Drivers_Dir

    [Drivers_Dir]
    KMDF_A1.sys

    ;-------------- Service installation
    [KMDF_A1_Device.NT.Services]
    AddService = KMDF_A1,%SPSVCINST_ASSOCSERVICE%, KMDF_A1_Service_Inst

    ;[KMDF_A1_install.HW]
    [KMDF_A1_inst]
    AddReg=KMDF_A1_addreg

    ; run the directives need by the port driver
    Include=disk.inf
    Needs=STANDARD_Inst.HW


    [KMDF_A1_addreg] 
    HKLM, System\CurrentControlSet\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318}, UpperFilters, 0x00010008, KMDF_A1
    ;HKR,,"UpperFilters",0x0001000A,"KMDF_A1" ; REG_MULTI_SZ value 


    [kbfiltr.NT.CoInstallers]
    AddReg=kbfiltr_CoInstaller_AddReg
    CopyFiles=kbfiltr_CoInstaller_CopyFiles

    [kbfiltr_CoInstaller_AddReg]
    HKR,,CoInstallers32,0x00010000, "WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll,WdfCoInstaller"

    [kbfiltr_CoInstaller_CopyFiles]
    WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll



    ; -------------- KMDF_A1 driver install sections
    [KMDF_A1_Service_Inst]
    DisplayName    = %KMDF_A1.SVCDESC%
    ServiceType    = 1               ; SERVICE_KERNEL_DRIVER
    StartType      = 0               ; SERVICE_DEMAND_START
    ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
    ServiceBinary  = %12%\KMDF_A1.sys

    ;
    ;--- KMDF_A1_Device Coinstaller installation ------
    ;

    [KMDF_A1_Device.NT.CoInstallers]
    AddReg=KMDF_A1_Device_CoInstaller_AddReg
    CopyFiles=KMDF_A1_Device_CoInstaller_CopyFiles

    [KMDF_A1_Device_CoInstaller_AddReg]
    HKR,,CoInstallers32,0x00010000, "WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll,WdfCoInstaller"

    [KMDF_A1_Device_CoInstaller_CopyFiles]
    WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll

    [KMDF_A1_Device.NT.Wdf]
    KmdfService =  KMDF_A1, KMDF_A1_wdfsect
    [KMDF_A1_wdfsect]
    KmdfLibraryVersion = $KMDFVERSION$
    [Strings]
    SPSVCINST_ASSOCSERVICE= 0x00000002
    ManufacturerName="ShasRaTech-VRD" ;TODO: Replace with your manufacturer name
    ClassName="KMDF_A1" ; TODO: edit ClassName
    DiskName = "KMDF_A1 Installation Disk"
    KMDF_A1.DeviceDesc = "KMDF_A1 Device"
    KMDF_A1.SVCDESC = "KMDF_A1 Service"

    //================================== 

    //=================================== Driver.c

    /*++

    Module Name:

        driver.c

    Abstract:

        This file contains the driver entry points and callbacks.

    Environment:

        Kernel-mode Driver Framework

    --*/

    #include "driver.h"
    #include "driver.tmh"
    #include <Wdf.h>
    #include <Wdfobject.h>

    #ifdef ALLOC_PRAGMA
    #pragma alloc_text (INIT, DriverEntry)
    #pragma alloc_text (PAGE, KMDFA1EvtDeviceAdd)
    #pragma alloc_text (PAGE, KMDFA1EvtDriverContextCleanup)
    #endif

    NTSTATUS
    DriverEntry(
        _In_ PDRIVER_OBJECT  DriverObject,
        _In_ PUNICODE_STRING RegistryPath
        )
    /*++

    Routine Description:
        DriverEntry initializes the driver and is the first routine called by the
        system after the driver is loaded. DriverEntry specifies the other entry
        points in the function driver, such as EvtDevice and DriverUnload.

    Parameters Description:

        DriverObject - represents the instance of the function driver that is loaded
        into memory. DriverEntry must initialize members of DriverObject before it
        returns to the caller. DriverObject is allocated by the system before the
        driver is loaded, and it is released by the system after the system unloads
        the function driver from memory.

        RegistryPath - represents the driver specific path in the Registry.
        The function driver can use the path to store driver related data between
        reboots. The path does not store hardware instance specific data.

    Return Value:

        STATUS_SUCCESS if successful,
        STATUS_UNSUCCESSFUL otherwise.

    --*/
    {
        WDF_DRIVER_CONFIG config;
        NTSTATUS status;
        WDF_OBJECT_ATTRIBUTES attributes;

        //
        // Initialize WPP Tracing
        //
        WPP_INIT_TRACING(DriverObject, RegistryPath);
        KdPrint(("Arun_KMDF_A1 Enter DriverEntry \n"));

       // TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_DRIVER, "%!FUNC! Entry");

        //
        // Register a cleanup callback so that we can call WPP_CLEANUP when
        // the framework driver object is deleted during driver unload.
        //
        WDF_OBJECT_ATTRIBUTES_INIT(&attributes);
        attributes.EvtCleanupCallback = KMDFA1EvtDriverContextCleanup;

        KdPrint(("Arun_KMDF_A1 78 DriverEntry \n"));
        WDF_DRIVER_CONFIG_INIT(&config, KMDFA1EvtDeviceAdd );

        KdPrint(("Arun_KMDF_A1 81 DriverEntry \n"));
        status = WdfDriverCreate(DriverObject,
                                 RegistryPath,
                                 &attributes,
                                 &config,
                                 WDF_NO_HANDLE
                                 );

        KdPrint(("Arun_KMDF_A1 89 DriverEntry \n"));
        if (!NT_SUCCESS(status)) {
            //TraceEvents(TRACE_LEVEL_ERROR, TRACE_DRIVER, "WdfDriverCreate failed %!STATUS!", status);
            WPP_CLEANUP(DriverObject);
            KdPrint(("Arun_KMDF_A1 93 DriverEntry \n"));
            return status;
        }

        //TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_DRIVER, "%!FUNC! Exit");
        KdPrint(("Arun_KMDF_A1 98 DriverEntry \n"));
        return status;
    }

    NTSTATUS
    KMDFA1EvtDeviceAdd(
        _In_    WDFDRIVER       Driver,
        _Inout_ PWDFDEVICE_INIT DeviceInit
        )
    /*++
    Routine Description:

        EvtDeviceAdd is called by the framework in response to AddDevice
        call from the PnP manager. We create and initialize a device object to
        represent a new instance of the device.

    Arguments:

        Driver - Handle to a framework driver object created in DriverEntry

        DeviceInit - Pointer to a framework-allocated WDFDEVICE_INIT structure.

    Return Value:

        NTSTATUS

    --*/
    {
    WDF_OBJECT_ATTRIBUTES   deviceAttributes;
    NTSTATUS                status;


        UNREFERENCED_PARAMETER(Driver);

        PAGED_CODE();

        //TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_DRIVER, "%!FUNC! Entry");
        KdPrint(("Arun_KMDF_A1 135 KMDFA1EvtDeviceAdd \n"));

    //
    // Tell the framework that you are filter driver. Framework
    // takes care of inherting all the device flags & characterstics
    // from the lower device you are attaching to.
    //
    WdfFdoInitSetFilter(DeviceInit);

        KdPrint(("Arun_KMDF_A1 142 KMDFA1EvtDeviceAdd \n"));
    WdfDeviceInitSetDeviceType(DeviceInit, FILE_DEVICE_DISK);

    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&deviceAttributes, FILTER_EXTENSION);


        status = KMDFA1CreateDevice(DeviceInit);


        return status;
    }

    VOID
    KMDFA1EvtDriverContextCleanup(
        _In_ WDFOBJECT DriverObject
        )
    /*++
    Routine Description:

        Free all the resources allocated in DriverEntry.

    Arguments:

        DriverObject - handle to a WDF Driver object.

    Return Value:

        VOID.

    --*/
    {
        UNREFERENCED_PARAMETER(DriverObject);

        PAGED_CODE();

      //  TraceEvents(TRACE_LEVEL_INFORMATION, TRACE_DRIVER, "%!FUNC! Entry");

        //
        // Stop WPP Tracing
        //
        WPP_CLEANUP(WdfDriverWdmGetDriverObject((WDFDRIVER)DriverObject));
    }

    //===================================

    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! device.c << I hope the functions in this file are called when we get a call back from pnp for EvtAddDevice.

    /*++

    Module Name:

        device.c - Device handling events for example driver.

    Abstract:

       This file contains the device entry points and callbacks.
        
    Environment:

        Kernel-mode Driver Framework

    --*/

    #include "driver.h"
    #include "device.tmh"
    #include "devguid.h"

    #ifdef ALLOC_PRAGMA
    #pragma alloc_text (PAGE, KMDFA1CreateDevice)
    #endif

    NTSTATUS
    KMDFA1CreateDevice(
        _Inout_ PWDFDEVICE_INIT DeviceInit
        )
    /*++

    Routine Description:

        Worker routine called to create a device and its software resources.

    Arguments:

        DeviceInit - Pointer to an opaque init structure. Memory for this
                        structure will be freed by the framework when the WdfDeviceCreate
                        succeeds. So don't access the structure after that point.

    Return Value:

        NTSTATUS

    --*/
    {
        WDF_OBJECT_ATTRIBUTES deviceAttributes;
        PDEVICE_CONTEXT deviceContext;
        WDFDEVICE device;
        NTSTATUS status = STATUS_SUCCESS;

        PAGED_CODE();
        KdPrint(("Arun_KEY_F Enter KMDFA1CreateDevice \n"));

        WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&deviceAttributes, DEVICE_CONTEXT);

        status = WdfDeviceCreate(&DeviceInit, &deviceAttributes, &device);
        KdPrint(("Arun_KEY_F Enter WdfDeviceCreate status = %d\n", status));
        if (NT_SUCCESS(status)) {
            KdPrint(("Arun_KEY_F 5WdfDeviceCreate status = %d\n", status));
            //
            // Get a pointer to the device context structure that we just associated
            // with the device object. We define this structure in the device.h
            // header file. DeviceGetContext is an inline function generated by
            // using the WDF_DECLARE_CONTEXT_TYPE_WITH_NAME macro in device.h.
            // This function will do the type checking and return the device context.
            // If you pass a wrong object handle it will return NULL and assert if
            // run under framework verifier mode.
            //
            deviceContext = DeviceGetContext(device);

            //
            // Initialize the context.
            //
            deviceContext->PrivateDeviceData = 0;

            //
            // Create a device interface so that applications can find and talk
            // to us.
            //
            status = WdfDeviceCreateDeviceInterface(
                device,
                &GUID_DEVCLASS_DISKDRIVE,
                NULL // ReferenceString
                );

            if (NT_SUCCESS(status)) {
                //
                // Initialize the I/O Package and any Queues
                //
                status = KMDFA1QueueInitialize(device);
            }
        }
        return STATUS_SUCCESS;
        //return status;
    }

    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    Please let me know what mistake I am doing. Once again, thanks for your time and responses.

    Thanks, 

    Arun Ayachith

    Saturday, December 21, 2019 6:09 PM
  • Logs from Debug

    totally need 0x6438 bytes for deviceExt memory
    Arun_KMDF_A1 Enter DriverEntry 
    Arun_KMDF_A1 78 DriverEntry 
    Arun_KMDF_A1 81 DriverEntry 
    Arun_KMDF_A1 89 DriverEntry 
    Arun_KMDF_A1 98 DriverEntry 
    onecore\base\telemetry\utc\service\engine\settingsmanager.cpp(888)\diagtrack.dll!00007FF9CCD8CADF: (caller: 00007FF9CCD8CD32) ReturnHr(1) tid(7fc) 80070002 The system cannot find the file specified.
    onecore\base\telemetry\utc\service\engine\settingsmanager.cpp(803)\diagtrack.dll!00007FF9CCD8CD52: (caller: 00007FF9CCD8D38D) LogHr(1) tid(7fc) 80070002 The system cannot find the file specified.
    onecore\base\telemetry\utc\service\engine\settingsmanager.cpp(503)\diagtrack.dll!00007FF9CCD8D4ED: (caller: 00007FF9CCD8E367) LogHr(2) tid(7fc) 80070005 Access is denied.
    onecore\base\flighting\flightsettings\broker\libs\clientapi\buildflightid.cpp(107)\FlightSettings.dll!00007FF9CBED19B0: (caller: 00007FF9CBED1726) ReturnHr(1) tid(7fc) 80070002 The system cannot find the file specified.
        CallContext:[\ActivityGetFlightsInfo] 


    .........

    .......
    ........
    shell\lib\bindctx.cpp(128)\explorerframe.dll!00007FF9C950F200: (caller: 00007FF9C95324EA) ReturnHr(8) tid(c7c) 80070057 The parameter is incorrect.
    shell\lib\bindctx.cpp(128)\explorerframe.dll!00007FF9C950F200: (caller: 00007FF9C95324EA) ReturnHr(9) tid(c7c) 80070057 The parameter is incorrect.
    shell\lib\bindctx.cpp(128)\explorerframe.dll!00007FF9C950F200: (caller: 00007FF9C95324EA) ReturnHr(10) tid(c7c) 80070057 The parameter is incorrect.
    shell\lib\bindctx.cpp(128)\explorerframe.dll!00007FF9C950F200: (caller: 00007FF9C95324EA) ReturnHr(11) tid(c7c) 80070057 The parameter is incorrect.
    shell\lib\bindctx.cpp(128)\explorerframe.dll!00007FF9C950F200: (caller: 00007FF9C95324EA) ReturnHr(12) tid(c7c) 80070057 The parameter is incorrect.

    ========================================

    I don't see my KMDFA1EvtDeviceAdd called. isn't it the problem?

    Saturday, December 21, 2019 6:11 PM
  • I don't see KMDF_A1 added into upperfilter list in registry 
    HKLM, System\CurrentControlSet\Control\Class\{4d36e967-e325-11ce-bfc1-08002be10318}

    is that a problem? 

    Saturday, December 21, 2019 6:16 PM
  • You need to look at an INX file for a filter, something like the mouse filter sample, and base your INX on it.  Right now you have an INX that is for a hardware device which is not going to work.


    Don Burn Windows Driver Consulting Website: http://www.windrvr.com

    Saturday, December 21, 2019 6:27 PM