fatmouse527
驱动牛犊
驱动牛犊
  • 注册日期2006-12-27
  • 最后登录2009-04-10
  • 粉丝1
  • 关注0
  • 积分347分
  • 威望85点
  • 贡献值0点
  • 好评度81点
  • 原创分1分
  • 专家分0分
阅读:1488回复:1

[s:8] 怎么用ZwSetInformationFile重命名文件呀,大侠

楼主#
更多 发布于:2007-01-23 16:17
  怎么用ZwSetInformationFile重命名文件呀,给个例子呀
驱网无线,快乐无限
fatmouse527
驱动牛犊
驱动牛犊
  • 注册日期2006-12-27
  • 最后登录2009-04-10
  • 粉丝1
  • 关注0
  • 积分347分
  • 威望85点
  • 贡献值0点
  • 好评度81点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-01-25 10:15
原来有呀,找到了

NTSTATUS
SfRenameFile(
    IN PWSTR SrcFileName,
    IN PWSTR DstFileName
    )
/*++

Arguments:
    SrcFileName - \??\x:\xxx\...\xxx.xxx
    DstFileName - \??\x:\xxx\...\xxx.xxx

--*/
{
    HANDLE FileHandle = NULL;
    OBJECT_ATTRIBUTES ObjectAttributes;
    IO_STATUS_BLOCK IoStatus;
    NTSTATUS Status;
    PFILE_RENAME_INFORMATION RenameInfo = NULL;
    UNICODE_STRING ObjectName;

    RenameInfo = (PFILE_RENAME_INFORMATION) ExAllocatePoolWithTag(
        NonPagedPool,
        sizeof(FILE_RENAME_INFORMATION) + MAX_PATH * sizeof(WCHAR),
        SFLT_POOL_TAG
        );
    if (RenameInfo == NULL)
    {
        KdPrint(("SfRename: RenameInfo err"));
        return STATUS_INSUFFICIENT_RESOURCES;
    }
    RtlZeroMemory(RenameInfo, sizeof(FILE_RENAME_INFORMATION) + MAX_PATH * sizeof(WCHAR));
    RenameInfo->FileNameLength = wcslen(DstFileName) * sizeof(WCHAR);
    wcscpy(RenameInfo->FileName, DstFileName);
    RenameInfo->ReplaceIfExists = 0;
    RenameInfo->RootDirectory = NULL;

    RtlInitUnicodeString(&ObjectName, SrcFileName);
    
    InitializeObjectAttributes(
        &ObjectAttributes,
        &ObjectName,
        OBJ_CASE_INSENSITIVE,
        NULL,
        NULL
        );
    
    Status = ZwCreateFile(
        &FileHandle,
        SYNCHRONIZE | DELETE,
        &ObjectAttributes,
        &IoStatus,
        NULL,
        0,
        FILE_SHARE_READ,
        FILE_OPEN,
        FILE_SYNCHRONOUS_IO_NONALERT | FILE_NO_INTERMEDIATE_BUFFERING,
        NULL,
        0);
    if (!NT_SUCCESS(Status))
    {
        KdPrint(("SfRename: ZwCreateFile err"));
        ExFreePoolWithTag(RenameInfo, SFLT_POOL_TAG);
        return Status;
    }

    Status = ZwSetInformationFile(
        FileHandle,
        &IoStatus,
        RenameInfo,
        sizeof(FILE_RENAME_INFORMATION) + MAX_PATH * sizeof(WCHAR),
        FileRenameInformation
        );
    if (!NT_SUCCESS(Status))
    {
        KdPrint(("SfRename: ZwSetInformationFile err"));
        ExFreePoolWithTag(RenameInfo, SFLT_POOL_TAG);
        ZwClose(FileHandle);
        return Status;
    }
    KdPrint(("SfRename success"));
    ZwClose(FileHandle);
    return Status;
}
驱网无线,快乐无限
游客

返回顶部