ReactOS 0.4.15-dev-7958-gcd0bb1a
fxfileobjectum.cpp
Go to the documentation of this file.
1/*++
2
3Copyright (c) Microsoft Corporation
4
5Module Name:
6
7 FxFileObjectUm.hpp
8
9Abstract:
10
11 This module implements a frameworks managed FileObject
12
13Author:
14
15
16
17Environment:
18
19 User mode only
20
21Revision History:
22
23
24
25--*/
26
27#include "coreprivshared.hpp"
28
29// Tracing support
30extern "C" {
31#include "FxFileObjectUm.tmh"
32}
33
34VOID
36 _In_ MdFileObject WdmFileObject,
37 _In_ WDF_FILEOBJECT_CLASS NormalizedFileClass,
40 )
41{
42 IWudfIoIrp* pIoIrp;
43 HRESULT hrQi;
44
45 UNREFERENCED_PARAMETER(WdmFileObject);
46 UNREFERENCED_PARAMETER(NormalizedFileClass);
47
48 ASSERT(NormalizedFileClass == WdfFileObjectWdfCannotUseFsContexts);
49
50 //
51 // In UMDF, fx file object is stored by host. Host passes it back to
52 // framework as a parameter to irp dispatch routine.
53 //
54 hrQi = Irp->QueryInterface(IID_IWudfIoIrp, (PVOID*)&pIoIrp);
55 FX_VERIFY(INTERNAL, CHECK_QI(hrQi, pIoIrp));
56 pIoIrp->Release();
57
58 pIoIrp->SetFrameworkFileObjectContext(Device->GetDeviceObject(),
59 (IUnknown *) this);
60}
61
62VOID
64 _In_ MdIrp CreateIrp
65 )
66{
67 FxIrp irp(CreateIrp);
68 IWudfIoIrp* ioIrp = irp.GetIoIrp();
69 IUnknown* pCxtFramework = NULL;
70 FxFileObject* pRelatedFileObj = NULL;
71
72 //
73 // Get framework related file object.
74 //
75 ioIrp->GetFrameworkRelatedFileObjectContext(
77 &pCxtFramework
78 );
79 if (pCxtFramework != NULL) {
80 pRelatedFileObj = (FxFileObject*) pCxtFramework;
81
82 pRelatedFileObj->AddRef();
83 this->m_RelatedFileObject = pRelatedFileObj;
84 }
85
86 return;
87}
88
93 )
94{
97
98 if (pWdmFO == NULL) {
99 FX_VERIFY(DRIVER(BadArgument, TODO), TRAPMSG("Cannot increment "
100 "process keep alive count from a file object that doesn't "
101 "have a WDM file object"));
103 }
104
105 //
106 // Validate that driver set UmdfFsContextUsePolicy = CannotUseFsContexts
107 //
108 if (pDevice->m_FsContextUsePolicy != WdfCannotUseFsContexts) {
109 FX_VERIFY(DRIVER(BadArgument, TODO), TRAPMSG("Cannot increment "
110 "process keep alive count unless UmdfFsContextUsePolicy INF "
111 "directive is set to WdfCannotUseFsContexts"));
113 }
114
115 return pDevice->NtStatusFromHr(
118}
119
unsigned char BOOLEAN
#define TODO
Definition: SAX2.c:44
LONG NTSTATUS
Definition: precomp.h:26
MdDeviceObject __inline GetDeviceObject(VOID)
Definition: fxdevice.hpp:174
static NTSTATUS NtStatusFromHr(_In_ IWudfDeviceStack *DevStack, _In_ HRESULT Hr)
Definition: fxdeviceum.cpp:826
IWudfDeviceStack2 * GetDeviceStack2(VOID)
Definition: fxdeviceum.hpp:444
WDF_FS_CONTEXT_USE_POLICY_TYPE m_FsContextUsePolicy
Definition: fxdevice.hpp:793
VOID Initialize(_In_ MdIrp CreateIrp)
VOID SetFileObjectContext(_In_ MdFileObject WdmFileObject, _In_ WDF_FILEOBJECT_CLASS NormalizedFileClass, _In_ MdIrp Irp, _In_ FxDevice *Device)
_Must_inspect_result_ NTSTATUS UpdateProcessKeepAliveCount(_In_ BOOLEAN Increment)
FxFileObject * m_RelatedFileObject
Definition: fxirp.hpp:28
IWudfIoIrp * GetIoIrp(VOID)
Definition: fxirpum.cpp:1777
CfxDevice * m_Device
Definition: fxobject.hpp:329
ULONG __inline AddRef(__in_opt PVOID Tag=NULL, __in LONG Line=0, __in_opt PSTR File=NULL)
Definition: fxobject.hpp:826
_In_ PIRP Irp
Definition: csq.h:116
#define NULL
Definition: types.h:112
IN OUT PLONG IN OUT PLONG Addend IN OUT PLONG IN LONG Increment
Definition: CrNtStubs.h:46
FX_VERIFY(INTERNAL, CHECK_NOT_NULL(LoaderInterface->pIWudfHost))
FxDevice * pDevice
return pList GetDevice()
return pFO GetWdmFileObject()
MdFileObject pWdmFO
FxIrp * irp
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
nsrefcnt Release()
#define ASSERT(a)
Definition: mode.c:44
#define _Must_inspect_result_
Definition: ms_sal.h:558
#define _In_
Definition: ms_sal.h:308
PFILE_OBJECT MdFileObject
Definition: mxgeneralkm.h:32
IWudfIrp * MdIrp
Definition: mxum.h:103
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
#define STATUS_INVALID_DEVICE_REQUEST
Definition: udferr_usr.h:138
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
_Must_inspect_result_ _In_ WDFDEVICE Device
Definition: wdfchildlist.h:474
enum _WDF_FILEOBJECT_CLASS WDF_FILEOBJECT_CLASS
@ WdfFileObjectWdfCannotUseFsContexts
Definition: wdfdevice.h:463