[WDF] Add Windows Driver Framework files

Takern from Microsoft GitHub repo:
d9c6040fe9

Licensed under MIT
This commit is contained in:
Victor Perevertkin 2020-09-24 23:51:15 +03:00
parent 545df81502
commit 8a978a179f
No known key found for this signature in database
GPG key ID: C750B7222E9C7830
475 changed files with 285099 additions and 0 deletions

View file

@ -0,0 +1,200 @@
/*++
Copyright (c) Microsoft Corporation
Module Name:
FxFileObjectCallbacks.h
Abstract:
This module implements the I/O package queue object callbacks
Author:
Environment:
Both kernel and user mode
Revision History:
--*/
#ifndef _FXFILEOBJECTCALLBACKS_H
#define _FXFILEOBJECTCALLBACKS_H
//
// EvtDeviceFileCreate callback delegate
//
class FxFileObjectFileCreate : public FxLockedCallback {
public:
PFN_WDF_DEVICE_FILE_CREATE Method;
FxFileObjectFileCreate(
VOID
) :
FxLockedCallback()
{
Method = NULL;
}
VOID
Invoke(
__in WDFDEVICE Device,
__in WDFREQUEST Request,
__in_opt WDFFILEOBJECT FileObject
)
{
if (Method != NULL) {
KIRQL irql = 0;
CallbackStart(&irql);
Method(Device, Request, FileObject);
CallbackEnd(irql);
}
}
};
//
// EvtFileCleanup callback delegate
//
class FxFileObjectFileCleanup : public FxLockedCallback {
public:
PFN_WDF_FILE_CLEANUP Method;
FxFileObjectFileCleanup(
VOID
) :
FxLockedCallback()
{
Method = NULL;
}
void
Invoke(
__in_opt WDFFILEOBJECT FileObject
)
{
if (Method != NULL) {
KIRQL irql = 0;
CallbackStart(&irql);
Method(FileObject);
CallbackEnd(irql);
}
}
};
//
// EvtFileClose callback delegate
//
class FxFileObjectFileClose : public FxLockedCallback {
public:
PFN_WDF_FILE_CLOSE Method;
FxFileObjectFileClose(
VOID
) :
FxLockedCallback()
{
Method = NULL;
}
void
Invoke(
__in_opt WDFFILEOBJECT FileObject
)
{
if (Method != NULL) {
KIRQL irql = 0;
CallbackStart(&irql);
Method(FileObject);
CallbackEnd(irql);
}
}
};
//
// EvtDeviceFileCreate callback delegate
//
class FxCxFileObjectFileCreate : public FxLockedCallback {
public:
PFN_WDFCX_DEVICE_FILE_CREATE Method;
FxCxFileObjectFileCreate(
VOID
) :
FxLockedCallback()
{
Method = NULL;
}
BOOLEAN
Invoke(
__in WDFDEVICE Device,
__in WDFREQUEST Request,
__in_opt WDFFILEOBJECT FileObject
)
{
BOOLEAN claimed = FALSE;
if (Method != NULL) {
KIRQL irql = 0;
CallbackStart(&irql);
claimed = Method(Device, Request, FileObject);
CallbackEnd(irql);
}
return claimed;
}
};
//
// Collection of file-object callbacks.
//
struct FxFileObjectInfo : public FxStump {
FxFileObjectInfo() :
FileObjectClass(WdfFileObjectInvalid),
AutoForwardCleanupClose(WdfUseDefault),
ClassExtension(FALSE),
CxDeviceInfo(NULL)
{
InitializeListHead(&ListEntry);
RtlZeroMemory(&Attributes, sizeof(Attributes));
}
~FxFileObjectInfo()
{
ASSERT(IsListEmpty(&ListEntry));
}
LIST_ENTRY ListEntry;
FxFileObjectFileCreate EvtFileCreate;
FxCxFileObjectFileCreate EvtCxFileCreate;
FxFileObjectFileCleanup EvtFileCleanup;
FxFileObjectFileClose EvtFileClose;
WDF_FILEOBJECT_CLASS FileObjectClass;
WDF_OBJECT_ATTRIBUTES Attributes;
WDF_TRI_STATE AutoForwardCleanupClose;
BOOLEAN ClassExtension;
FxCxDeviceInfo* CxDeviceInfo;
};
#endif // _FXFILEOBJECTCALLBACKS_H