
Ситуация такая: возникла необходимость получить SID пользователя, являющегося владельцем процесса. Собственно, функция была написана, и отлажена, но возникла одна проблема:
на некоторых процессах функция отрабатывает нормально, на других - отказывается корректно выполнять вот этот кусок:
if((hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, pid)) != 0) {
// если пришли сюда - дальше все выполняется корректно ...
...
}
else {
int err = GetLastError();
ShowMessage("Error (" + IntToStr(err) + "): " + SysErrorMessage(err));
}
Что самое интересное: функция спокойно отрабатывает на некоторых процессах, владельцами которых является SYSTEM/NT AUTHORITY, но процессы, принадлежащие пользователю из Restricted Users иногда не открывает (хотя при обработке другого процесса того же пользователя прекрасно возвращается SID). Не отрабатывают все время одни и те же процессы (совершенно разных пользователей, от NETWORK SERVICE и SYSTEM до того самого Restricted User-а), программа, естественно, запускается с правами Administrator-а...
Внимание, вопрос: куда копать, и почему, собственно, иногда все работает, а иногда - возвращается "Error (87): The parameter is incorrect" ?
P.S. Компилятор - BDS 2006 (хотя и на GCC, и на Intel C++ Compiler происходит то же самое)