Obtaining A File Name From A File Handle (Windows)
Obtaining A File Name From A File Handle (Windows)
Obtaining A File Name From A File Handle (Windows)
Home
Library
Learn
Downloads
Support
MSDN Library Windows Development System Services Memory Management Using the Memory Management Function Using File Mapping Obtaining a File Name From a File H Community Content
GetFinalPathNameByHandle Vista+ or Server 2008+ applicati...
More...
#define BUFSIZE 512 BOOL GetFileNameFromHandle(HANDLE hFile) { BOOL bSuccess = FALSE; TCHAR pszFilename[MAX_PATH+1]; HANDLE hFileMap; // Get the file size. DWORD dwFileSizeHi = 0; DWORD dwFileSizeLo = GetFileSize(hFile, &dwFileSizeHi); if( dwFileSizeLo == 0 && dwFileSizeHi == 0 ) { printf("Cannot map a file with a length of zero.\n"); return FALSE; } // Create a file mapping object. hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 1, NULL); if (hFileMap) { // Create a file mapping to get the file name. void* pMem = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0 , 1); if (pMem) { if (GetMappedFileName (GetCurrentProcess(), pMem, pszFilename, MAX_PATH)) { // Translate path with device name to drive letters . TCHAR szTemp[BUFSIZE]; szTemp[0] = '\0'; if (GetLogicalDriveStrings(BUFSIZE-1, szTemp)) { TCHAR szName[MAX_PATH]; TCHAR szDrive[3] = TEXT(" :"); BOOL bFound = FALSE; TCHAR* p = szTemp; do { // Copy the drive letter to the template string *szDrive = *p; // Look up each device name if (QueryDosDevice(szDrive, szName, MAX_PATH)) { UINT uNameLen = _tcslen(szName); if (uNameLen < MAX_PATH) { bFound = _tcsnicmp(pszFilename, szName, uNa meLen) == 0; if (bFound && *(pszFilename + uNameLen) ==
Community Content
GetFinalPathNameByHandle
Add
FAQ
Vista+ or Server 2008+ applications can call GetFinalPathNameByHandle() instead. History 4/7/2008 Josh Poley [MSFT]
2010 Microsoft Corporation. All rights reserved. Terms of Use | Trademarks | Privacy Statement | Feedback