6. FAQ o Win API

Q> How to receive хэндл полиси? 
A>  
#include <ntsecapi.h> 
#include <lmaccess.h> 

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 
                );
}

2000 (c) DM