пятница, 22 июля 2011 г.

FltpFilterVerifierThunks

а вот например я уже писал про всякие ф-ции, перехватываемые Driver Verifier
Внезапно оказалось что такие ф-ции могут перехватываться не только из ntoskrnl, но и из любых других драйверов, имеющих соотв-щую поддержку
Собс-но поддержка заключается в вызове недокументированной ф-ции MmAddVerifierThunks, которой на вход приезжают два параметра:

struct vrf_thunk
{
 PVOID original_function;
 PVOID patched_function;
};

NTKERNELAPI NTSTATUS MmAddVerifierThunks(struct vrf_thunk *tab, ULONG tabSizeInBytes);


Driver Verifier патчит IAT подопытного драйвера, заменяя original_function на patched_function, которая в свою очередь делает все необходимые проверки (например своих параметров или IRQL) и вызывает original_function (или DbgPrintEx если чо-нть нашлось).

Например fltmgr поддерживает driver verifier, регистрируя в DriverEntry табличку FltpFilterVerifierThunks. Интересно, что число поддерживаемых ф-ций отличается в разных версиях windows:

xp
  • FltStartFiltering
  • FltUnregisterFilter
  • FltCompletePendedPostOperation
  • FltCompletePendedPreOperation
  • FltLockUserBuffer
  • FltDoCompletionProcessingWhenSafe
  • FltQueueDeferredIoWorkItem
  • FltCbdqInsertIo
  • FltCbdqRemoveIo
  • FltCbdqRemoveNextIo
  • FltAllocateCallbackData
  • FltFreeCallbackData
  • FltReuseCallbackData
  • FltPerformSynchronousIo
  • FltPerformAsynchronousIo
  • FltReissueSynchronousIo
  • FltReadFile
  • FltWriteFile
  • FltCompareInstanceAltitudes
  • FltGetSwappedBufferMdlAddress
  • FltRetainSwappedBufferMdlAddress
vista
  • FltStartFiltering
  • FltUnregisterFilter
  • FltCompletePendedPostOperation
  • FltCompletePendedPreOperation
  • FltLockUserBuffer
  • FltDoCompletionProcessingWhenSafe
  • FltQueueDeferredIoWorkItem
  • FltCbdqInsertIo
  • FltCbdqRemoveIo
  • FltCbdqRemoveNextIo
  • FltAllocateCallbackData
  • FltFreeCallbackData
  • FltReuseCallbackData
  • FltPerformSynchronousIo
  • FltPerformAsynchronousIo
  • FltReissueSynchronousIo
  • FltReadFile
  • FltWriteFile
  • FltAllocateContext
  • FltGetContexts
  • FltReleaseContexts
  • FltSetVolumeContext
  • FltSetInstanceContext
  • FltSetFileContext
  • FltSetStreamContext
  • FltSetStreamHandleContext
  • FltSetTransactionContext
  • FltDeleteVolumeContext
  • FltDeleteInstanceContext
  • FltDeleteFileContext
  • FltDeleteStreamContext
  • FltDeleteStreamHandleContext
  • FltDeleteTransactionContext
  • FltGetVolumeContext
  • FltGetInstanceContext
  • FltGetFileContext
  • FltGetStreamContext
  • FltGetStreamHandleContext
  • FltGetTransactionContext
  • FltReferenceContext
  • FltReleaseContext
  • FltAllocateDeferredIoWorkItem
  • FltFreeDeferredIoWorkItem
  • FltAllocateGenericWorkItem
  • FltFreeGenericWorkItem
  • FltGetFileNameInformation
  • FltGetFileNameInformationUnsafe
  • FltGetTunneledName
  • FltGetDestinationFileNameInformation
  • FltReferenceFileNameInformation
  • FltReleaseFileNameInformation
  • FltCreateFileEx2
  • FltCreateFileEx
  • FltOpenVolume
  • FltCreateFile
  • FltClose
  • FltObjectReference
  • FltObjectDereference
  • FltGetFilterFromName
  • FltGetFilterFromInstance
  • FltGetVolumeFromName
  • FltGetVolumeFromInstance
  • FltGetVolumeFromFileObject
  • FltGetVolumeFromDeviceObject
  • FltEnumerateVolumes
  • FltEnumerateFilters
  • FltAttachVolume
  • FltAttachVolumeAtAltitude
  • FltGetVolumeInstanceFromName
  • FltGetLowerInstance
  • FltGetUpperInstance
  • FltGetTopInstance
  • FltGetBottomInstance
  • FltEnumerateInstances
  • FltCompareInstanceAltitudes
  • FltGetSwappedBufferMdlAddress
  • FltRetainSwappedBufferMdlAddress
  • FltRequestOperationStatusCallback
  • FltCancelFileOpen
  • FltGetRoutineAddress
w7
  • FltStartFiltering
  • FltUnregisterFilter
  • FltCompletePendedPostOperation
  • FltCompletePendedPreOperation
  • FltLockUserBuffer
  • FltDoCompletionProcessingWhenSafe
  • FltQueueDeferredIoWorkItem
  • FltCbdqInsertIo
  • FltCbdqRemoveIo
  • FltCbdqRemoveNextIo
  • FltAllocateCallbackData
  • FltAllocateCallbackDataEx
  • FltFreeCallbackData
  • FltReuseCallbackData
  • FltPerformSynchronousIo
  • FltPerformAsynchronousIo
  • FltReissueSynchronousIo
  • FltReadFile
  • FltWriteFile
  • FltTagFile
  • FltUntagFile
  • FltQueryInformationFile
  • FltSetInformationFile
  • FltQueryDirectoryFile
  • FltQueryEaFile
  • FltSetEaFile
  • FltQueryVolumeInformationFile
  • FltQuerySecurityObject
  • FltSetSecurityObject
  • FltFlushBuffers
  • FltFsControlFile
  • FltDeviceIoControlFile
  • FltCreateSystemVolumeInformationFolder
  • FltDeviceIoControlFile
  • FltAllocateContext
  • FltGetContexts
  • FltReleaseContexts
  • FltSetVolumeContext
  • FltSetInstanceContext
  • FltSetFileContext
  • FltSetStreamContext
  • FltSetStreamHandleContext
  • FltSetTransactionContext
  • FltDeleteVolumeContext
  • FltDeleteInstanceContext
  • FltDeleteFileContext
  • FltDeleteStreamContext
  • FltDeleteStreamHandleContext
  • FltDeleteTransactionContext
  • FltGetVolumeContext
  • FltGetInstanceContext
  • FltGetFileContext
  • FltGetStreamContext
  • FltGetStreamHandleContext
  • FltGetTransactionContext
  • FltReferenceContext
  • FltReleaseContext
  • FltAllocateDeferredIoWorkItem
  • FltFreeDeferredIoWorkItem
  • FltAllocateGenericWorkItem
  • FltFreeGenericWorkItem
  • FltGetFileNameInformation
  • FltGetFileNameInformationUnsafe
  • FltGetTunneledName
  • FltGetDestinationFileNameInformation
  • FltReferenceFileNameInformation
  • FltReleaseFileNameInformation
  • FltCreateFileEx2
  • FltCreateFileEx
  • FltOpenVolume
  • FltCreateFile
  • FltClose
  • FltObjectReference
  • FltObjectDereference
  • FltGetFilterFromName
  • FltGetFilterFromInstance
  • FltGetVolumeFromName
  • FltGetVolumeFromInstance
  • FltGetVolumeFromFileObject
  • FltGetVolumeFromDeviceObject
  • FltEnumerateVolumes
  • FltEnumerateFilters
  • FltAttachVolume
  • FltAttachVolumeAtAltitude
  • FltGetVolumeInstanceFromName
  • FltGetLowerInstance
  • FltGetUpperInstance
  • FltGetTopInstance
  • FltGetBottomInstance
  • FltEnumerateInstances
  • FltCompareInstanceAltitudes
  • FltGetSwappedBufferMdlAddress
  • FltRetainSwappedBufferMdlAddress
  • FltRequestOperationStatusCallback
  • FltCancelFileOpen
  • FltGetRoutineAddress

Комментариев нет:

Отправить комментарий