private void Connect(string serverName, SamServerAccessMask accessMask, NetworkCredential credential = null) { Validator.AssertNotNullOrWhiteSpace(serverName, "serverName"); this.Name = serverName; SafeSamHandle serverHandle; NtStatus connectResult; if(credential != null ) { // Connect named pipe // TODO: Use SamConnectWithCreds instead this.IPCConnection = new NamedPipeConnection(serverName, credential); } connectResult = NativeMethods.SamConnect(this.Name, out serverHandle, accessMask); Validator.AssertSuccess(connectResult); this.Handle = serverHandle; }
private void Connect(string serverName, SamServerAccessMask accessMask, NetworkCredential credential = null) { Validator.AssertNotNullOrWhiteSpace(serverName, "serverName"); this.Name = serverName; SafeSamHandle serverHandle; NtStatus connectResult; if (credential != null) { // Connect named pipe // TODO: Use SamConnectWithCreds instead this.IPCConnection = new NamedPipeConnection(serverName, credential); } connectResult = NativeMethods.SamConnect(this.Name, out serverHandle, accessMask); Validator.AssertSuccess(connectResult); this.Handle = serverHandle; }
internal static NtStatus SamConnectWithCreds(string serverName, out SafeSamHandle serverHandle, SamServerAccessMask accessMask, SafeRpcAuthIdentityHandle authIdentity) { uint unknown = 0; IntPtr objectAttributes = IntPtr.Zero; UnicodeString unicodeServerName = new UnicodeString(serverName); string servicePrincipalName = spnPrefix + serverName; NtStatus result = SamConnectWithCreds(ref unicodeServerName, out serverHandle, accessMask, objectAttributes, authIdentity, servicePrincipalName, out unknown); if (result == NtStatus.RpcUnknownAuthenticationService) { // Try it again, but without the SPN servicePrincipalName = null; return(SamConnectWithCreds(ref unicodeServerName, out serverHandle, accessMask, objectAttributes, authIdentity, servicePrincipalName, out unknown)); } else { return(result); } }
private static extern NtStatus SamConnectWithCreds([In] ref UnicodeString serverName, out SafeSamHandle serverHandle, SamServerAccessMask accessMask, IntPtr objectAttributes, SafeRpcAuthIdentityHandle authIdentity, [MarshalAs(UnmanagedType.LPWStr)] string servicePrincipalName, out uint unknown);
internal static NtStatus SamConnect(string serverName, out SafeSamHandle serverHandle, SamServerAccessMask accessMask) { IntPtr objectAttributes = IntPtr.Zero; UnicodeString unicodeServerName = new UnicodeString(serverName); return(SamConnect(ref unicodeServerName, out serverHandle, accessMask, objectAttributes)); }
private static extern NtStatus SamConnect([In] ref UnicodeString serverName, out SafeSamHandle serverHandle, SamServerAccessMask accessMask, IntPtr objectAttributes);
public SamServer(string serverName, SamServerAccessMask accessMask) : base(null) { this.Connect(serverName, accessMask); }
public SamServer(string serverName, NetworkCredential credential, SamServerAccessMask accessMask) : base(null) { this.Connect(serverName, accessMask, credential); }