Конференция "WinAPI" » Принцип работы LookupPrivilegeValueW
 
  • Riply © (15.06.09 15:46) [0]
    Здравствуйте !

    Есть такая ф-ия в Windows.pas:
    function LookupPrivilegeValueW(lpSystemName, lpName: PWideChar; var lpLuid: TLargeInteger): BOOL; stdcall;
    Интересует принцип ее работы.
    Есть предположение, что это выглядит примерно так:

    for i := Low(GLOBAL_PRIVILEGE_TABLE) to High(GLOBAL_PRIVILEGE_TABLE) do
     if IsEqualElement(lpName, GLOBAL_PRIVILEGE_TABLE[i]) then
      begin
       lpLuid := i;
       Break;
      end;



    Где:
    GLOBAL_PRIVILEGE_TABLE - некая глобальная таблица(список) привилегий.
    IsEqualElement - некая функция сравнения PWCHAR с именем привилегии.

    Верно ли это ?

    (Во всяком случае, ReactOs`цы полагают, что дела обстоят именно так.
    У них эта таблица вообще локальна в функции)

    Иными словами:
    Допустим, что Luid для SeCreateTokenPrivilege равен 2.
    Могу ли я быть уверенной, что под любой системой (где есть эта привилегия),
    при любых настройках и любых условиях, LookupPrivilegeValueW,
    вызванная с параметром SeCreateTokenPrivilege вернет мне ту же двойку,
    даже в военное время :)

    P.S.
    Очень сильно смущает то, что lpLuid объявлена как LARGE_INTEGER.
    Наталкивает на мысли, что к "стандартному" значению Luid может быть добавлено что-то.
    P.P.S.
    И если предположение о существовании глобальной таблицы GLOBAL_PRIVILEGE_TABLE
    верно, то как до нее "добраться" ?
  • Riply © (15.06.09 21:46) [1]
    > [0] Riply ©   (15.06.09 15:46)
    > И если предположение о существовании глобальной таблицы GLOBAL_PRIVILEGE_TABLE
    > верно, то как до нее "добраться" ?

    Вот, что гасит MSDN:
    The SeExports structure is a large external static SE_EXPORTS structure that defines a number
    of well-known security constants for privilege values and security identifiers.

    typedef struct _SE_EXPORTS {
    // поскипано :)
    } SE_EXPORTS, *PSE_EXPORTS;
    extern NTKERNELAPI PSE_EXPORTS SeExports;

    Comments
    SeExports is a large external static SE_EXPORTS structure exported by Ntoskrnl.exe.


    Так, что наще предположение оказалось правильным. ( Ну... почти правильным :) )
  • Игорь Шевченко © (15.06.09 22:12) [2]

    > Допустим, что Luid для SeCreateTokenPrivilege равен 2.
    > Могу ли я быть уверенной, что под любой системой (где есть
    > эта привилегия),
    > при любых настройках и любых условиях, LookupPrivilegeValueW,
    >  
    > вызванная с параметром SeCreateTokenPrivilege вернет мне
    > ту же двойку,


    RTFS: ntddk.h

    #define SE_MIN_WELL_KNOWN_PRIVILEGE       (2L)
    #define SE_CREATE_TOKEN_PRIVILEGE         (2L)
    #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE   (3L)
    #define SE_LOCK_MEMORY_PRIVILEGE          (4L)
    #define SE_INCREASE_QUOTA_PRIVILEGE       (5L)

    ...
  • Riply © (15.06.09 23:43) [3]
    > [2] Игорь Шевченко ©   (15.06.09 22:12)

    Спасибо :)
 
Конференция "WinAPI" » Принцип работы LookupPrivilegeValueW
Есть новые Нет новых   [134434   +28][b:0][p:0.001]