Win32 API FAQ
Страница 4.


 

6)----------------------------------------------------------------------------

 

    Q> А как для вышеприведенного фрагмента получить хэндл полиси???

    A>

#include
#include

void
InitLsaString(
       PLSA_UNICODE_STRING LsaString,
       LPWSTR String
       )
{
       DWORD StringLength;

       if (String == NULL) {
           LsaString->Buffer = NULL;
           LsaString->Length = 0;
           LsaString->MaximumLength = 0;
           return;
       }

       StringLength = wcslen(String);
       LsaString->Buffer = String;
       LsaString->Length = (USHORT) StringLength * sizeof(WCHAR);
       LsaString->MaximumLength=(USHORT)(StringLength+1) * sizeof(WCHAR);
}
//----------------------------------------------------------------------
NTSTATUS
OpenPolicy(
       LPWSTR ServerName,
       DWORD DesiredAccess,
       PLSA_HANDLE PolicyHandle
       )
{
       LSA_OBJECT_ATTRIBUTES ObjectAttributes;
       LSA_UNICODE_STRING ServerString;
       PLSA_UNICODE_STRING Server = NULL;

       //
       // Always initialize the object attributes to all zeroes.
       //
       ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes));

       if (ServerName != NULL) {
           //
           // Make a LSA_UNICODE_STRING out of the LPWSTR passed in
           //
           InitLsaString(&ServerString, ServerName);
           Server = &ServerString;
       }

       //
       // Attempt to open the policy.
       //
       return LsaOpenPolicy(
                   Server,
                   &ObjectAttributes,
                   DesiredAccess,
                   PolicyHandle
                   );
}

7)---------------------------------------------------------------------------

 

    Q> Как взять себе привилегию?

    A> Hапример берем привилегию отладки программ:

void getDebugPriv( void )
{
    HANDLE hToken;
    LUID sedebugnameValue;
    TOKEN_PRIVILEGES tkp;

    if ( ! OpenProcessToken( GetCurrentProcess(),
     TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
     return;

    if ( !LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) )
    {
     CloseHandle( hToken );
     return;
    }

    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Luid = sedebugnameValue;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL );

    CloseHandle( hToken );
}

 
« Предыдущая статья   Следующая статья »