In diskperf.sys , I find IRP_MJ_FLUSH_BUFFER hava fileobject info
so , I want to get this file’s cluster info by fileobject in diskperf.sys
my code:
NTSTATUS func_Status = STATUS_SUCCESS ;
PIRP pirp_MyIRP = NULL ;
PDEVICE_OBJECT pdevobj_DeviceObject = NULL ;
KEVENT kevent_Event ;
IO_STATUS_BLOCK struct_ioStatus ;
PSTRUCT_FILE_BCB pstruct_FileBcb = NULL ;
STARTING_VCN_INPUT_BUFFER struct_StartVCN ;
PRETRIEVAL_POINTERS_BUFFER pstruct_RetrieVAL = NULL ;
ULONG ulong_IRPBufferSize = 0 ;
KeInitializeEvent(&kevent_Event,
NotificationEvent,
FALSE) ;
pstruct_FileBcb = (PSTRUCT_FILE_BCB)pfileobj_param_File->SectionObjectPointer->SharedCacheMap ;
ulong_IRPBufferSize = (ULONG)(sizeof(RETRIEVAL_POINTERS_BUFFER)+(pstruct_FileBcb->FileSize.QuadPart/g_ulong_BytePerCluster)*sizeof(pstruct_RetrieVAL->Extents)) ;
pdevobj_DeviceObject = pfileobj_param_File->DeviceObject ;
pstruct_RetrieVAL = (PRETRIEVAL_POINTERS_BUFFER)ExAllocatePoolWithTag(NonPagedPool,
ulong_IRPBufferSize,
DISKPERF_POOLTAG) ;
RtlZeroMemory(pstruct_RetrieVAL, ulong_IRPBufferSize) ;
#define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS)
pirp_MyIRP = IoBuildDeviceIoControlRequest(FSCTL_GET_RETRIEVAL_POINTERS,
pdevobj_DeviceObject,
&struct_StartVCN,
sizeof(struct_StartVCN),
pstruct_RetrieVAL,
ulong_IRPBufferSize,
FALSE,
&kevent_Event,
&struct_ioStatus) ;
but is always faild . file’s start cluster is 0 ,