Другие языки программирования и технологии

Товарищи, есть функция которая определяет владельца файла, с задачей своей справляется НО при каждом выполнение поедает

У тебя там куча Exit-ов, а я далеко не уверен, что finally их ловит. Замени их на выбросы исключений.
Сергей Шадский
Сергей Шадский
55 546
Лучший ответ
о, голодная функция!
На С++ все очень просто:
BOOL bSuccess = FALSE;
LPCTSTR lpFile = _T("F:\\Regshot 3.0\\Regshot\\bin\\Debug.x86\\client.exe");
HANDLE hFile = CreateFile(lpFile, READ_CONTROL, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, OPEN_EXISTING, 0, NULL);
if ( hFile != INVALID_HANDLE_VALUE )
{
PSECURITY_DESCRIPTOR psd = NULL;
PSID pOwnerSID = NULL;
if ( ERROR_SUCCESS == GetSecurityInfo(hFile, SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION, &pOwnerSID, NULL, NULL, NULL, &psd) )
{
LPTSTR lpName = NULL;
DWORD cchName = 0;
LPTSTR lpDomain = NULL;
DWORD cchDomain = 0;
SID_NAME_USE NameUse;
LookupAccountSid(NULL, pOwnerSID, lpName, &cchName, lpDomain, &cchDomain, &NameUse);

if ( ERROR_INSUFFICIENT_BUFFER == GetLastError() )
{
lpName = static_cast<lptstr>(LocalAlloc(LPTR, cchName * sizeof(TCHAR)));
if ( lpName )
{
lpDomain = static_cast<lptstr>(LocalAlloc(LPTR, cchDomain * sizeof(TCHAR)));
if ( lpDomain )
{
if ( LookupAccountSid(NULL, pOwnerSID, lpName, &cchName, lpDomain, &cchDomain, &NameUse) )
{
_tprintf(_T("Owner Name\t%s\n"), lpName);
_tprintf(_T("Owner Domain\t%s\n"), lpDomain);
bSuccess = TRUE;
}
LocalFree(lpName);
}
LocalFree(lpName);
}
}
LocalFree(psd);
}
CloseHandle(hFile);
}

На паскаль переводить не буду.
Altynbek Toigonbaev
Altynbek Toigonbaev
21 360
о да, надеюсь эта функция не поедает запустившего ее :D

смотрю у тебя Exit используется. я не знаю означает ли это выход из функции как return в С++, но если да, то эти штуки
FreeMem(SecDescr);
FreeMem(OwnerName);
FreeMem(DomainName);
FreeMemory(OwnerSID);
не выполняются. здесь и утечка памяти.

этов всего лишь предположение, я синтаксис бейсика и паскаля не знаю
Игорь Yc
Игорь Yc
4 338
Что поедает?

Похожие вопросы