코드/c/c++ 파일 핸들에 대한 접근 경로 얻기 WeZZ 2014. 8. 13. 15:27 BOOL GetFileNameFromHandle(HANDLE hFile, WCHAR* lpwPath, DWORD ccSize) { BOOL bRet = FALSE; HANDLE hFileMap; DWORD dwFileSizeHi = 0; WCHAR ntName[1024] = {0,}; hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 1, NULL); if(!hFileMap) goto $cleanup; PVOID pMem = NULL; MAPVIEWOFFILE_(pMem, hFileMap, FILE_MAP_READ, 0, 0, 1); if(!pMem) goto $cleanup; if(!GetMappedFileNameW (GetCurrentProcess(), pMem, ntName, ARRAYSIZE(ntName))) goto $cleanup; WCHAR drives[1024] = {0,}; WCHAR deviceName[100] = {0,}; WCHAR *name = drives; WCHAR tmp[3] = {0,}; int n = GetLogicalDriveStringsW(sizeof(drives), drives); if(n >= sizeof(drives) || n == 0) goto $cleanup; while(*name) { Sleep(1); tmp[0] = name[0]; tmp[1] = name[1]; tmp[2] = L'\0'; if(!QueryDosDeviceW(tmp, deviceName, sizeof(deviceName))) { name += lstrlenW(name) + 1; continue; } if(wcsncmp(deviceName, ntName, lstrlenW(deviceName)) == 0) { StringCbCopyW(lpwPath, ccSize, tmp); StringCbCatW(lpwPath, ccSize, ntName + lstrlenW(deviceName)); bRet = TRUE; break; } name += lstrlenW(name) + 1; } $cleanup: if(pMem) UnmapViewOfFile(pMem); if(hFileMap) CLOSEHANDLE_(hFileMap); return bRet; } 저작자표시 비영리