Другие языки программирования и технологии
Товарищи, есть функция которая определяет владельца файла, с задачей своей справляется НО при каждом выполнение поедает
У тебя там куча Exit-ов, а я далеко не уверен, что finally их ловит. Замени их на выбросы исключений.
о, голодная функция!
На С++ все очень просто:
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);
}
На паскаль переводить не буду.
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);
}
На паскаль переводить не буду.
о да, надеюсь эта функция не поедает запустившего ее :D
смотрю у тебя Exit используется. я не знаю означает ли это выход из функции как return в С++, но если да, то эти штуки
FreeMem(SecDescr);
FreeMem(OwnerName);
FreeMem(DomainName);
FreeMemory(OwnerSID);
не выполняются. здесь и утечка памяти.
этов всего лишь предположение, я синтаксис бейсика и паскаля не знаю
смотрю у тебя Exit используется. я не знаю означает ли это выход из функции как return в С++, но если да, то эти штуки
FreeMem(SecDescr);
FreeMem(OwnerName);
FreeMem(DomainName);
FreeMemory(OwnerSID);
не выполняются. здесь и утечка памяти.
этов всего лишь предположение, я синтаксис бейсика и паскаля не знаю
Что поедает?
Похожие вопросы
- Возможно ли в теории написать программу, которая по изображению графика функции будет определять саму функцию?
- Командный файл, который выводит список файлов, находящихся в домашнем каталоге пользователя и недоступных ему по чтению.
- Помогите с Си. Вопрос по заданию (насчет типизированной функции, которая должна возвращать массив)
- Разве ПХП определяет тип файла только по расширению? Других вариантов у него нет?
- MS Dos, можно ли с помощью его функций найти на компе файлы одного типа? Музыку, картинки, видео - хочу рассортировать.
- В чем разница между функциями, которые возвращают значения и которые не возвращают? Не вникаю в смысл слова "возвращает"
- Пожалуйста,помогите написать программу,которая определяет длину самой длинной подстроки из подряд стоящих букв "с"!
- Написать программу которая определяет количество учеников в классе,чей рост превышает средний(Turbo Pascal)
- помогите написать программку которая определяет среднее арифметическое непарных элементов массива.
- Объясните, пожалуйста, как написать программу в Pascal'e, которая определяет, находится ли координата в ромбе или нет.