#include <windows.h> #include <stdio.h> DWORD UpdateDefaultPassword(WCHAR * pwszSecret) { LSA_OBJECT_ATTRIBUTES ObjectAttributes; LSA_HANDLE LsaPolicyHandle = NULL; LSA_UNICODE_STRING lusSecretName; LSA_UNICODE_STRING lusSecretData; USHORT SecretNameLength; USHORT SecretDataLength; NTSTATUS ntsResult = STATUS_SUCCESS; DWORD dwRetCode = ERROR_SUCCESS; // Object attributes are reserved, so initialize to zeros. ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes)); // Get a handle to the Policy object. ntsResult = LsaOpenPolicy( NULL, // local machine &ObjectAttributes, POLICY_CREATE_SECRET, &LsaPolicyHandle); if( STATUS_SUCCESS != ntsResult ) { // An error occurred. Display it as a win32 error code. dwRetCode = LsaNtStatusToWinError(ntsResult); wprintf(L"Failed call to LsaOpenPolicy %lu\n", dwRetCode); return dwRetCode; } // Initialize an LSA_UNICODE_STRING for the name of the // private data ("DefaultPassword"). SecretNameLength = (USHORT)wcslen(L"DefaultPassword"); lusSecretName.Buffer = L"DefaultPassword"; lusSecretName.Length = SecretNameLength * sizeof(WCHAR); lusSecretName.MaximumLength = (SecretNameLength+1) * sizeof(WCHAR); // If the pwszSecret parameter is NULL, then clear the secret. if( NULL == pwszSecret ) { wprintf(L"Clearing the secret...\n"); ntsResult = LsaStorePrivateData( LsaPolicyHandle, &lusSecretName, NULL); dwRetCode = LsaNtStatusToWinError(ntsResult); } else { wprintf(L"Setting the secret...\n"); // Initialize an LSA_UNICODE_STRING for the value // of the private data. SecretDataLength = (USHORT)wcslen(pwszSecret); lusSecretData.Buffer = pwszSecret; lusSecretData.Length = SecretDataLength * sizeof(WCHAR); lusSecretData.MaximumLength = (SecretDataLength+1) * sizeof(WCHAR); ntsResult = LsaStorePrivateData( LsaPolicyHandle, &lusSecretName, &lusSecretData); dwRetCode = LsaNtStatusToWinError(ntsResult); } LsaClose(LsaPolicyHandle); if (dwRetCode != ERROR_SUCCESS) wprintf(L"Failed call to LsaStorePrivateData %lu\n", dwRetCode); return dwRetCode; }
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)