1

我挂钩了本机 api ZwCreateFile,并且 wdk 文档说 Windows 使用ZwCreateFile创建或打开一个目录。我可以检测到打开testdir的操作,但是我没有停止打开目录的操作。我自己的FakeZwCreateFile的代码是这样的:</p>

NTSTATUS FakeZwOpenFile(
    OUT PHANDLE  FileHandle,
    IN ACCESS_MASK  DesiredAccess,
    IN POBJECT_ATTRIBUTES  ObjectAttributes,
    OUT PIO_STATUS_BLOCK  IoStatusBlock,
    IN ULONG  ShareAccess,
    IN ULONG  OpenOptions
    )
{
    NTSTATUS rtStatus = STATUS_SUCCESS;
    UNICODE_STRING test = RTL_CONSTANT_STRING(L"\\??\\c:\\testdir");

    if (!RtlCompareUnicodeString(ObjectAttributes->ObjectName, &test, TRUE))
    {
        DbgPrint("%wZ\n", &test);
        FileHandle = NULL;
        IoStatusBlock->Status = rtStatus = STATUS_ACCESS_DENIED;
        goto exit;
    }

Orig:   
    OrigZwOpenFile = (NTOPENFILE)oldServiceAddr[SYSTEM_INDEX(ZwOpenFile)];
    rtStatus = OrigZwOpenFile(
            FileHandle,
            DesiredAccess,
            ObjectAttributes,
            IoStatusBlock,
            ShareAccess,
            OpenOptions
            );

exit:       
    return rtStatus;
}

为什么我无法停止打开c:\testdir目录?我应该怎么做才能拦截创建新文件夹的操作????

4

1 回答 1

1

在这种情况下,最好使用文件系统过滤器驱动程序而不是 SSDT 挂钩,因为 FS 过滤器驱动程序在 64 位版本的 windows 中正常工作,但 SSDT 只能在 32 位中使用(如果您可以绕过 windows Patch Guard,那么您可以在 32 位中使用 SSDT 挂钩) !

于 2013-11-20T15:47:39.010 回答