ShIvADeSt
Moderator | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: На Windows NT4-2000-XP все понятно (и то, только с правами администратора), а вот в Windows 98/ME (что б они горели), не выходит-с... | На XPSP1 и выше есть функция GetProcessID Цитата: The GetProcessId function retrieves the process identifier of the specified process. DWORD GetProcessId( HANDLE Process ); Parameters Process [in] Handle to the process. The handle must have the PROCESS_QUERY_INFORMATION access right. Return Values If the function succeeds, the return value is the process identifier of the specified process. If the function fails, the return value is zero. To get extended error information, call GetLastError. | Причем все удивляются, почему она не появилась раньше еще под 9х. Это я на форуме одном англоязычнопм прочитал когда смотрел что может тебе помочь. Цитата: - Как по хэндлу файла найти его полный путь? | Было такое, сам же и спрашивал К модератору здесь даю полный код а не ссылку на страницу, ибо страница была удалена из базы мсдн Цитата: #include <windows.h> #include <stdio.h> #include <tchar.h> #include <string.h> #include <psapi.h> #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, BUFSIZE)) { UINT uNameLen = _tcslen(szName); if (uNameLen < MAX_PATH) { bFound = _tcsnicmp(pszFilename, szName, uNameLen) == 0; if (bFound) { // Reconstruct pszFilename using szTemp // Replace device path with DOS path TCHAR szTempFile[MAX_PATH]; _stprintf(szTempFile, TEXT("%s%s"), szDrive, pszFilename+uNameLen); _tcsncpy(pszFilename, szTempFile, MAX_PATH); } } } // Go to the next NULL character. while (*p++); } while (!bFound && *p); // end of string } } bSuccess = TRUE; UnmapViewOfFile(pMem); } CloseHandle(hFileMap); } printf("File name is %s\n", pszFilename); return(bSuccess); |
---------- И создал Бог женщину... Существо получилось злобное, но забавное... |
|