NTSTATUS InstallNetWare( LPWSTR lpNcpSecretKey ) { NTSTATUS ntstatus; OBJECT_ATTRIBUTES ObjAttributes; LSA_HANDLE PolicyHandle; LSA_HANDLE SecretHandle; UNICODE_STRING SecretNameString; UNICODE_STRING unicodeCurrentValue; UNICODE_STRING unicodeOldValue; InitializeObjectAttributes( &ObjAttributes, NULL, 0L, NULL, NULL); ntstatus = LsaOpenPolicy( NULL, &ObjAttributes, POLICY_CREATE_SECRET, &PolicyHandle ); if ( !NT_SUCCESS( ntstatus )) { return( ntstatus ); } RtlInitUnicodeString( &SecretNameString, NCP_LSA_SECRET_KEY ); ntstatus = LsaCreateSecret( PolicyHandle, &SecretNameString, SECRET_SET_VALUE | DELETE, &SecretHandle ); if ( ntstatus == STATUS_OBJECT_NAME_COLLISION ) { ntstatus = LsaOpenSecret( PolicyHandle, &SecretNameString, SECRET_SET_VALUE, &SecretHandle ); } if ( NT_SUCCESS( ntstatus )) { RtlInitUnicodeString( &unicodeOldValue, NULL ); RtlInitUnicodeString( &unicodeCurrentValue, lpNcpSecretKey ); ntstatus = LsaSetSecret( SecretHandle, &unicodeCurrentValue, &unicodeOldValue ); LsaClose( SecretHandle ); } LsaClose( PolicyHandle ); return( ntstatus ); }
void CSharedSecret::Commit( CString zone ) { char zoneUTF8[ 256 ]; char keyUTF8[ 256 ]; char secretUTF8[ 256 ]; StringObjectToUTF8String( zone, zoneUTF8, sizeof( zoneUTF8 ) ); StringObjectToUTF8String( m_key, keyUTF8, sizeof( keyUTF8 ) ); StringObjectToUTF8String( m_secret, secretUTF8, sizeof( secretUTF8 ) ); LsaSetSecret( zoneUTF8, keyUTF8, secretUTF8 ); }