阅读:1405回复:1
要hook一个file. 不能改动数据。 只能监视所做的操作.要如何办?[
比如要Hook 一个 C:\a.txt; 拦截读写。 在 ntcreatefile里。 判断要打开的文件是不是 "C:\a.txt". 是就存下这个句柄。
在ntwritefile 和 ntreadfile 看是不是操作这个句柄,是就加上自己的处理。 不能改动数据。 只能监视做了什么。 /** * 根据文件句柄获取文件 DOS 全路径 */ // BOOL ApiHookFsGetFilenameByHandle( IN HANDLE hFileHandle, OUT PCHAR pszFilename, IN USHORT uSize ) // { // NTSTATUS ntStatus; // BOOL bRet = FALSE; // PWCHAR pBuffer; // PFILE_OBJECT pstFileObject; // POBJECT_NAME_INFORMATION pstObjectNameInfo; // if ( NULL == hFileHandle ) // { // return FALSE; // } // // ntStatus = ObReferenceObjectByHandle( hFileHandle, FILE_READ_DATA, *IoFileObjectType, KernelMode, (void **)&pstFileObject, NULL ); // if ( NT_SUCCESS( ntStatus ) ) // { // ntStatus = IoQueryFileDosDeviceName( pstFileObject, &pstObjectNameInfo ); // if ( NT_SUCCESS( ntStatus ) ) // { // // ntStatus = drvfunc_w2a( pstObjectNameInfo->Name.Buffer, pszFilename, uSize ); // if ( NT_SUCCESS( ntStatus ) ) // { // bRet = TRUE; // } // } // } // return bRet; // } drvfunc_w2a 要引用什么头文件! |
|
沙发#
发布于:2011-06-02 22:25
根据win32 api函数命名规则 应该不是win32 api函数里的 可能是第三方写的 调用内核驱动实现根据参数获取文件名。
|
|