2017-09-10 55 views
0

我想使用文件的现有句柄或使用文件ID来打开文件的备用数据流。我发现的唯一方法是全名(文件名+ ADS名称)。 我担心在操作过程中文件被重命名。从文件句柄或文件ID打开备用数据流(ADS)

有没有办法做到这一点?

+0

如果匿名数据流(即“file.ext”与“file.ext :: $ DATA”相同)在没有删除共享的情况下打开,则不能在您上重命名,至少不能从用户模式。如果是这种情况,并且您更愿意使用Windows API而不是直接进行系统调用,那么您可以将工作目录设置为该文件的目录并使用相对开放。 Windows在调用'NtCreateFile'时将使用进程工作目录句柄作为['OBJECT_ATTRIBUTES'](https://msdn.microsoft.com/en-us/library/ff557749)中的'RootDirectory'句柄。 – eryksun

回答

1

这是很容易做NtOpenFileNtCreateFile

例如开放现有的ADS上hFile

NTSTATUS OpenADS(PHANDLE FileHandle, ACCESS_MASK DesiredAccess, HANDLE hFile, PCWSTR Name) 
{ 
    IO_STATUS_BLOCK iosb; 
    UNICODE_STRING ObjectName; 
    RtlInitUnicodeString(&ObjectName, Name); 
    OBJECT_ATTRIBUTES oa = { sizeof(oa), hFile, &ObjectName }; 
    return NtOpenFile(FileHandle, DesiredAccess, &oa, &iosb, FILE_SHARE_VALID_FLAGS, FILE_SYNCHRONOUS_IO_NONALERT); 
} 

其中NameL":test_stream"(与:开始)

+0

谢谢!你知道是否有方法使用文件ID和流名直接打开ADS?我的意思是不使用ID首先打开文件。 – michael

+0

@michael - no。直接通过id和流名称你不能打开流文件。任何使用'FILE_OPEN_BY_FILE_ID'的方法都需要在'OBJECT_ATTRIBUTES'中有一些打开的文件。你问是否可能从文件句柄打开相对 - 是的 - 可能的,我显示代码。有可能通过文件打开文件** it ** id - 是的。但哟反正这里需要一些已经打开的文件。相对通过文件ID和流名称打开 - 不可能 – RbMm

+0

如果我有卷的句柄,如何使用文件ID和流名称打开ADS(无需首先打开文件)? – michael

相关问题