/*++

Copyright (c) Microsoft Corporation. All rights reserved.

Module Name:

    Wdffileobject.h

Environment:

    user mode

NOTE: This header is generated by stubwork.

      To modify contents, add or remove <shared> or <umdf>
      tags in the corresponding .x and .y template files.

--*/

#pragma once

#ifndef WDF_EXTERN_C
  #ifdef __cplusplus
    #define WDF_EXTERN_C       extern "C"
    #define WDF_EXTERN_C_START extern "C" {
    #define WDF_EXTERN_C_END   }
  #else
    #define WDF_EXTERN_C
    #define WDF_EXTERN_C_START
    #define WDF_EXTERN_C_END
  #endif
#endif

WDF_EXTERN_C_START

typedef enum _WDF_FILE_INFORMATION_CLASS {
    WdfFileInformationDirectory = 1,
    WdfFileInformationFullDirectory, //  2
    WdfFileInformationBothDirectory, //  3
    WdfFileInformationBasic, //  4
    WdfFileInformationStandard, //  5
    WdfFileInformationInternal, //  6
    WdfFileInformationEa, //  7
    WdfFileInformationAccess, //  8
    WdfFileInformationName, //  9
    WdfFileInformationRename, //  10
    WdfFileInformationLink, //  11
    WdfFileInformationNames, //  12
    WdfFileInformationDisposition, //  13
    WdfFileInformationPosition, //  14
    WdfFileInformationFullEa, //  15
    WdfFileInformationMode, //  16
    WdfFileInformationAlignment, //  17
    WdfFileInformationAll, //  18
    WdfFileInformationAllocation, //  19
    WdfFileInformationEndOfFile, //  20
    WdfFileInformationAlternateName, //  21
    WdfFileInformationStream, //  22
    WdfFileInformationPipe, //  23
    WdfFileInformationPipeLocal, //  24
    WdfFileInformationPipeRemote, //  25
    WdfFileInformationMailslotQuery, //  26
    WdfFileInformationMailslotSet, //  27
    WdfFileInformationCompression, //  28
    WdfFileInformationObjectId, //  29
    WdfFileInformationCompletion, //  30
    WdfFileInformationMoveCluster, //  31
    WdfFileInformationQuota, //  32
    WdfFileInformationReparsePoint, //  33
    WdfFileInformationNetworkOpen, //  34
    WdfFileInformationAttributeTag, //  35
    WdfFileInformationTracking, //  36
    WdfFileInformationIdBothDirectory, //  37
    WdfFileInformationIdFullDirectory, //  38
    WdfFileInformationValidDataLength, //  39
    WdfFileInformationShortName, //  40
    WdfFileInformationIoCompletionNotification, //  41
    WdfFileInformationIoStatusBlockRange, //  42
    WdfFileInformationIoPriorityHint, //  43
    WdfFileInformationSfioReserve, //  44
    WdfFileInformationSfioVolume, //  45
    WdfFileInformationHardLink, //  46
    WdfFileInformationProcessIdsUsingFile, //  47
    WdfFileInformationNormalizedName, //  48
    WdfFileInformationNetworkPhysicalName, //  49
    WdfFileInformationIdGlobalTxDirectory, //  50
    WdfFileInformationIsRemoteDevice, //  51
    WdfFileInformationAttributeCache, //  52
    WdfFileInformationMaximum,
} WDF_FILE_INFORMATION_CLASS, *PWDF_FILE_INFORMATION_CLASS;


//
// WDF Function: WdfFileObjectGetFileName
//
typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
WDFAPI
PUNICODE_STRING
(*PFN_WDFFILEOBJECTGETFILENAME)(
    _In_
    PWDF_DRIVER_GLOBALS DriverGlobals,
    _In_
    WDFFILEOBJECT FileObject
    );

_IRQL_requires_max_(PASSIVE_LEVEL)
PUNICODE_STRING
FORCEINLINE
WdfFileObjectGetFileName(
    _In_
    WDFFILEOBJECT FileObject
    )
{
    return ((PFN_WDFFILEOBJECTGETFILENAME) WdfFunctions[WdfFileObjectGetFileNameTableIndex])(WdfDriverGlobals, FileObject);
}


//
// WDF Function: WdfFileObjectGetDevice
//
typedef
_IRQL_requires_max_(DISPATCH_LEVEL)
WDFAPI
WDFDEVICE
(*PFN_WDFFILEOBJECTGETDEVICE)(
    _In_
    PWDF_DRIVER_GLOBALS DriverGlobals,
    _In_
    WDFFILEOBJECT FileObject
    );

_IRQL_requires_max_(DISPATCH_LEVEL)
WDFDEVICE
FORCEINLINE
WdfFileObjectGetDevice(
    _In_
    WDFFILEOBJECT FileObject
    )
{
    return ((PFN_WDFFILEOBJECTGETDEVICE) WdfFunctions[WdfFileObjectGetDeviceTableIndex])(WdfDriverGlobals, FileObject);
}


//
// WDF Function: WdfFileObjectGetInitiatorProcessId
//
typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
WDFAPI
ULONG
(*PFN_WDFFILEOBJECTGETINITIATORPROCESSID)(
    _In_
    PWDF_DRIVER_GLOBALS DriverGlobals,
    _In_
    WDFFILEOBJECT FileObject
    );

_IRQL_requires_max_(PASSIVE_LEVEL)
ULONG
FORCEINLINE
WdfFileObjectGetInitiatorProcessId(
    _In_
    WDFFILEOBJECT FileObject
    )
{
    return ((PFN_WDFFILEOBJECTGETINITIATORPROCESSID) WdfFunctions[WdfFileObjectGetInitiatorProcessIdTableIndex])(WdfDriverGlobals, FileObject);
}


//
// WDF Function: WdfFileObjectGetRelatedFileObject
//
typedef
_IRQL_requires_max_(PASSIVE_LEVEL)
WDFAPI
WDFFILEOBJECT
(*PFN_WDFFILEOBJECTGETRELATEDFILEOBJECT)(
    _In_
    PWDF_DRIVER_GLOBALS DriverGlobals,
    _In_
    WDFFILEOBJECT FileObject
    );

_IRQL_requires_max_(PASSIVE_LEVEL)
WDFFILEOBJECT
FORCEINLINE
WdfFileObjectGetRelatedFileObject(
    _In_
    WDFFILEOBJECT FileObject
    )
{
    return ((PFN_WDFFILEOBJECTGETRELATEDFILEOBJECT) WdfFunctions[WdfFileObjectGetRelatedFileObjectTableIndex])(WdfDriverGlobals, FileObject);
}

WDF_EXTERN_C_END

