Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

Здесь есть возможность читать онлайн «Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Советы по Delphi. Версия 1.4.3 от 1.1.2001: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Советы по Delphi. Версия 1.4.3 от 1.1.2001»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

…начиная с 1001. Смотрите другие файлы…

Советы по Delphi. Версия 1.4.3 от 1.1.2001 — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Советы по Delphi. Версия 1.4.3 от 1.1.2001», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

//Declare our class exeptions

EThunkError = class(Exception);

EFOpenError = class(Exception);

var

User16Handle : THandle = 0;

GetFSR : TGetFSR = nil;

//Prototypes for some undocumented API

functionLoadLibrary16(LibFileName: PAnsiChar): THandle; stdcall; externalkernel32 index35;

functionFreeLibrary16(LibModule: THandle): THandle; stdcall; externalkernel32 index36;

functionGetProcAddress16(Module: THandle; ProcName: LPCSTR): TFarProc; stdcall; externalkernel32 index37;

procedureQT_Thunk; cdecl; external'kernel32.dll' name'QT_Thunk';

{$StackFrames On}

functionGetFeeSystemResources(SysResource: Word): Word;

varEatStackSpace: String[$3C];

begin

// Ensure buffer isn't optimised away

EatStackSpace := '';

@GetFSR:=GetProcAddress16(User16Handle, 'GETFREESYSTEMRESOURCES');

if Assigned(GetFSR) then //Test result for nil

asm

//Manually push onto the stack type of resource to be checked first

push SysResource

//Load routine address into EDX

mov edx, [GetFSR]

//Call routine

call QT_Thunk

//Assign result to the function

mov @Result, ax

end

else raiseEFOpenError.Create('GetProcAddress16 failed!');

end;

initialization

//Check Platform for Windows 9x

ifWin32Platform <> VER_PLATFORM_WIN32_WINDOWS then raiseEThunkError.Create('Flat thunks only supported under Windows 9x');

//Load 16-bit DLL (USER.EXE)

User16Handle:= LoadLibrary16(PChar('User.exe'));

ifUser16Handle < 32 then raiseEFOpenError.Create('LoadLibrary16 failed!');

finalization

//Release 16-bit DLL when done

ifUser16Handle <> 0 thenFreeLibrary16(User16Handle);

end.

Как проверить, имеем ли мы административные привилегии в системе?

Nomadicпишет:

// Routine: check if the user has administrator provileges

// Was converted from C source by Akzhan Abdulin. Not properly tested.

typePTOKEN_GROUPS = TOKEN_GROUPS^;

functionRunningAsAdministrator(): Boolean;

var

SystemSidAuthority: SID_IDENTIFIER_AUTHORITY = SECURITY_NT_AUTHORITY;

psidAdmin: PSID;

ptg: PTOKEN_GROUPS = nil;

htkThread: Integer; { HANDLE }

cbTokenGroups: Longint; { DWORD }

iGroup: Longint; { DWORD }

bAdmin: Boolean;

begin

Result := false;

if notOpenThreadToken(GetCurrentThread(), // get security token

TOKEN_QUERY, FALSE, htkThread) then

ifGetLastError() = ERROR_NO_TOKEN then begin

if notOpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, htkThread) thenExit;

end elseExit;

ifGetTokenInformation(htkThread, // get #of groups

TokenGroups, nil, 0, cbTokenGroups) thenExit;

ifGetLastError() <> ERROR_INSUFFICIENT_BUFFER thenExit;

ptg := PTOKEN_GROUPS(getmem(cbTokenGroups));

if notAssigned(ptg) thenExit;

if notGetTokenInformation(htkThread, // get groups

TokenGroups, ptg, cbTokenGroups, cbTokenGroups) thenExit;

if notAllocateAndInitializeSid(SystemSidAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdmin) thenExit;

iGroup := 0;

whileiGroup < ptg^.GroupCount do// check administrator group

begin

ifEqualSid(ptg^.Groups[iGroup].Sid, psidAdmin) then begin

Result := TRUE;

break;

end;

Inc(iGroup);

end;

FreeSid(psidAdmin);

end;

Два метода в одном флаконе:

#include

#include

#include

#pragma hdrstop

#pragma comment(lib, "netapi32.lib")

// My thanks to Jerry Coffin (jcoffin@taeus.com)

// for this much simpler method.

bool jerry_coffin_method() {

bool result;

DWORD rc;

wchar_t user_name[256];

USER_INFO_1 *info;

DWORD size = sizeof(user_name);

GetUserNameW(user_name, &size);

rc = NetUserGetInfo(NULL, user_name, 1, (byte **)&info);

if (rc != NERR_Success) return false;

result = info->usri1_priv == USER_PRIV_ADMIN;

NetApiBufferFree(info);

return result;

}

bool look_at_token_method() {

int found;

DWORD i, l;

HANDLE hTok;

PSID pAdminSid;

SID_IDENTIFIER_AUTHORITY ntAuth = SECURITY_NT_AUTHORITY;

byte rawGroupList[4096];

TOKEN_GROUPS& groupList = *((TOKEN_GROUPS *)rawGroupList);

if (!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &hTok)) {

printf( "Cannot open thread token, trying process token [%lu].\n", GetLastError());

if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hTok)) {

printf("Cannot open process token, quitting [%lu].\n", GetLastError());

return 1;

}

}

// normally, I should get the size of the group list first, but ...

l = sizeof rawGroupList;

if (!GetTokenInformation(hTok, TokenGroups, &groupList, l, &l)) {

printf( "Cannot get group list from token [%lu].\n", GetLastError());

return 1;

}

// here, we cobble up a SID for the Administrators group, to compare to.

if (!AllocateAndInitializeSid(&ntAuth, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pAdminSid )) {

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Советы по Delphi. Версия 1.4.3 от 1.1.2001»

Представляем Вашему вниманию похожие книги на «Советы по Delphi. Версия 1.4.3 от 1.1.2001» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Советы по Delphi. Версия 1.4.3 от 1.1.2001»

Обсуждение, отзывы о книге «Советы по Delphi. Версия 1.4.3 от 1.1.2001» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x