Hi,
I am having trouble getting data from LsaRetrievePrivateData.
here is the code
GetLsaPolicy is a function that returns the LsaPolicyHandleCode:<DllImport("advapi32.dll", CharSet:=CharSet.Auto, SetLastError:=True, PreserveSig:=True)> _ Private Shared Function LsaRetrievePrivateData(ByVal policyHandle As IntPtr, ByRef KeyName As LSA_UNICODE_STRING, ByRef PrivateData As Long) As UInteger End Function <DllImport("advapi32.dll", PreserveSig:=True)> _ Private Shared Function LsaOpenPolicy(ByRef SystemName As LSA_UNICODE_STRING, ByRef ObjectAttributes As LSA_OBJECT_ATTRIBUTES, ByVal DesiredAccess As Int32, ByRef PolicyHandle As IntPtr) As UInt32 End Function Private Function GetSecret() As String Dim lusSecretData As New LSA_UNICODE_STRING() Dim PrivateData As Long Dim Value As String Dim LsaPolicyHandle As IntPtr = GetLsaPolicy(LSA_AccessPolicy.POLICY_GET_PRIVATE_INFORMATION) Dim result As UInteger = LsaRetrievePrivateData(LsaPolicyHandle, secretName, PrivateData) ReleaseLsaPolicy(LsaPolicyHandle) If result <> 0 Then Dim lastError As String = "RetrievePrivateData failed: " & Marshal.GetLastWin32Error & " " & New System.ComponentModel.Win32Exception().Message Throw New Exception(lastError) End If lusSecretData = DirectCast(Marshal.PtrToStructure(PrivateData, GetType(LSA_UNICODE_STRING)), LSA_UNICODE_STRING) Value = Marshal.PtrToStringUni(lusSecretData.Buffer) 'lusSecretData = Marshal.PtrToStructure(PrivateData, GetType(LSA_UNICODE_STRING)) 'Value = Marshal.PtrToStringAuto(lusSecretData.Buffer).Substring(0, lusSecretData.Length / 2) Return Value End Function
ReleaseLsaPolicy is a function that closes the LsaPolicyHandle
I have a function that Set the Secret and that all works fine.
What isn't working is the bold sections to get the value back, is there anyone that can guide me in the right direction.
Thanks
Rodney




Reply With Quote
