summaryrefslogtreecommitdiffstats
path: root/private/oleutest/act/client/pswrd.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'private/oleutest/act/client/pswrd.cxx')
-rw-r--r--private/oleutest/act/client/pswrd.cxx58
1 files changed, 58 insertions, 0 deletions
diff --git a/private/oleutest/act/client/pswrd.cxx b/private/oleutest/act/client/pswrd.cxx
new file mode 100644
index 000000000..3dd7f6545
--- /dev/null
+++ b/private/oleutest/act/client/pswrd.cxx
@@ -0,0 +1,58 @@
+extern "C"
+{
+#include <nt.h>
+#include <ntrtl.h>
+#include <nturtl.h>
+#include <ntlsa.h>
+}
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winnls.h>
+#include <stdio.h>
+
+BOOL SetPassword(TCHAR * szCID, TCHAR * pszPw)
+{
+#ifndef CHICO
+ WCHAR * szPw = pszPw;
+ LSA_OBJECT_ATTRIBUTES sObjAttributes;
+ LSA_HANDLE hPolicy;
+ LSA_UNICODE_STRING sKey;
+ LSA_UNICODE_STRING sPassword;
+ WCHAR szKey[256];
+ swprintf(szKey, L"SCM:%s", szCID);
+ sKey.Length = (wcslen(szKey) + 1) * sizeof(WCHAR);
+ sKey.MaximumLength = (wcslen(szKey) + 1) * sizeof(WCHAR);
+ sKey.Buffer = szKey;
+ sPassword.Length = (wcslen(szPw) + 1) * sizeof(WCHAR);
+ sPassword.MaximumLength = 80 * sizeof(WCHAR);
+ sPassword.Buffer = szPw;
+
+ InitializeObjectAttributes(&sObjAttributes, NULL, 0L, NULL, NULL);
+
+ // open the local security policy
+ if (!NT_SUCCESS(
+ LsaOpenPolicy(
+ NULL,
+ &sObjAttributes,
+ POLICY_CREATE_SECRET,
+ &hPolicy)))
+ {
+ printf("LsaOpenPolicy failed with %d\n",GetLastError());
+ return(FALSE);
+ }
+
+ // store private data
+ if (!NT_SUCCESS(
+ LsaStorePrivateData(hPolicy, &sKey, &sPassword)))
+ {
+ printf("LsaStorePrivateData failed with %d\n",GetLastError());
+ return(FALSE);
+ }
+
+ LsaClose(hPolicy);
+#endif
+ return(TRUE);
+}
+
+