假设我有两个汉德:
HANDLE h1;
HANDLE h2;
两者都收到了一些Windows API函数产生的值 - 特别是,我对调用CreateFile()
产生的句柄感兴趣。在h1
的情况下,如何确定h2
和CreateFile()
引用相同的基础对象 - 相同的文件,目录或设备?是否有一些API来确定?
答案 0 :(得分:2)
GetFileInformationByHandle API返回可用于唯一标识引用对象的信息:
您可以比较BY_HANDLE_FILE_INFORMATION结构中返回的VolumeSerialNumber和FileIndex成员,以确定两条路径是否映射到同一目标;例如,您可以比较两个文件路径并确定它们是否映射到同一目录。
例如:
bool SameFile( HANDLE h1, HANDLE h2 ) {
BY_HANDLE_FILE_INFORMATION bhfi1 = { 0 };
BY_HANDLE_FILE_INFORMATION bhfi2 = { 0 };
if ( ::GetFileInformationByHandle( h1, &bhfi1 ) &&
::GetFileInformationByHandle( h2, &bhfi2 ) ) {
return ( ( bhfi1.nFileIndexHigh == bhfi2.nFileIndexHigh ) &&
( bhfi1.nFileIndexLow == bhfi2.nFileIndexLow ) &&
( bhfi1.dwVolumeSerialNumber == bhfi2.dwVolumeSerialNumber ) );
}
return false;
}
答案 1 :(得分:2)
Windows 10的新功能:
CompareObjectHandles - 比较两个对象句柄,以确定它们是否引用相同的底层内核对象。
https://msdn.microsoft.com/en-us/library/windows/desktop/mt438733(v=vs.85).aspx
答案 2 :(得分:1)
您可以使用GetFinalPathNameByHandle并比较两个句柄的文件路径。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa364962(v=vs.85).aspx