MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как на С++ WinAPI узнать имя всех процессов или процесса, удерживающих файл?"
Answer 1225048
Для этого используется Restart Manager API. Принцип как и здесь, только работаем с именем файла, а не с дескриптором:
#include <stdio.h> #include <Windows.h> #include <restartmanager.h> #pragma comment(lib, "Rstrtmgr.lib") void PrintProcesses(const WCHAR* file) { DWORD hSess = 0; WCHAR key[50] = L"MySession"; DWORD res; res = RmStartSession(&hSess, 0, key); if (res != 0) { wprintf(L"Cannot start session\n"); return; } LPCWSTR filenames[] = { file }; res = RmRegisterResources(hSess, 1, filenames, 0, NULL, 0, NULL); if (res != 0) { wprintf(L"Cannot register resource\n"); return; } UINT procInfoNeeded; UINT procInfo = 10; DWORD rebootReasons; RM_PROCESS_INFO info[10]; res = RmGetList(hSess, &procInfoNeeded, &procInfo, info, &rebootReasons); if (res != 0) { wprintf(L"Cannot get list of processes\n"); return; } for (int i = 0; i < procInfo; i++) wprintf(L"%u: %s\n", info[i].Process.dwProcessId, info[i].strAppName); } int main() { PrintProcesses(L"c:\\Test\\file.txt"); getchar(); }
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.