코드/c/c++ 파일 핸들에 대한 접근 경로 얻기 by WeZZ 2014. 8. 13. 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; } 공유하기 게시글 관리 WeZz 저작자표시 비영리 관련글 CreateFile MSDN 번역 INI 섹션 이름 열거 하기 윈도우 종료 이벤트 받기 64비트 환경에서 32비트 프로세스에서 64비트 경로 얻기