코드/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; } 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기WeZz 저작자표시 비영리 관련글 CreateFile MSDN 번역 INI 섹션 이름 열거 하기 윈도우 종료 이벤트 받기 64비트 환경에서 32비트 프로세스에서 64비트 경로 얻기