@@ -118,7 +118,21 @@ public static class LogonUtils
118118 /// <returns>The logged on token.</returns>
119119 public static NtToken Logon ( string user , string domain , string password , SecurityLogonType type )
120120 {
121- if ( ! SecurityNativeMethods . LogonUser ( user , domain , password , type , 0 , out SafeKernelObjectHandle handle ) )
121+ return Logon ( user , domain , password , type , Logon32Provider . Default ) ;
122+ }
123+
124+ /// <summary>
125+ /// Logon a user with a username and password.
126+ /// </summary>
127+ /// <param name="user">The username.</param>
128+ /// <param name="domain">The user's domain.</param>
129+ /// <param name="password">The user's password.</param>
130+ /// <param name="type">The type of logon token.</param>
131+ /// <param name="provider">The Logon provider.</param>
132+ /// <returns>The logged on token.</returns>
133+ public static NtToken Logon ( string user , string domain , string password , SecurityLogonType type , Logon32Provider provider )
134+ {
135+ if ( ! SecurityNativeMethods . LogonUser ( user , domain , password , type , provider , out SafeKernelObjectHandle handle ) )
122136 {
123137 throw new SafeWin32Exception ( ) ;
124138 }
@@ -132,9 +146,10 @@ public static NtToken Logon(string user, string domain, string password, Securit
132146 /// <param name="domain">The user's domain.</param>
133147 /// <param name="password">The user's password.</param>
134148 /// <param name="type">The type of logon token.</param>
149+ /// <param name="provider">The Logon provider.</param>
135150 /// <param name="groups">Additional groups to add. Needs SeTcbPrivilege.</param>
136151 /// <returns>The logged on token.</returns>
137- public static NtToken Logon ( string user , string domain , string password , SecurityLogonType type , IEnumerable < UserGroup > groups )
152+ public static NtToken Logon ( string user , string domain , string password , SecurityLogonType type , Logon32Provider provider , IEnumerable < UserGroup > groups )
138153 {
139154 TokenGroupsBuilder builder = new TokenGroupsBuilder ( ) ;
140155 foreach ( var group in groups )
@@ -144,7 +159,7 @@ public static NtToken Logon(string user, string domain, string password, Securit
144159
145160 using ( var group_buffer = builder . ToBuffer ( ) )
146161 {
147- if ( ! SecurityNativeMethods . LogonUserExExW ( user , domain , password , type , 0 , group_buffer ,
162+ if ( ! SecurityNativeMethods . LogonUserExExW ( user , domain , password , type , provider , group_buffer ,
148163 out SafeKernelObjectHandle token , null , null , null , null ) )
149164 {
150165 throw new SafeWin32Exception ( ) ;
@@ -153,6 +168,20 @@ public static NtToken Logon(string user, string domain, string password, Securit
153168 }
154169 }
155170
171+ /// <summary>
172+ /// Logon a user with a username and password.
173+ /// </summary>
174+ /// <param name="user">The username.</param>
175+ /// <param name="domain">The user's domain.</param>
176+ /// <param name="password">The user's password.</param>
177+ /// <param name="type">The type of logon token.</param>
178+ /// <param name="groups">Additional groups to add. Needs SeTcbPrivilege.</param>
179+ /// <returns>The logged on token.</returns>
180+ public static NtToken Logon ( string user , string domain , string password , SecurityLogonType type , IEnumerable < UserGroup > groups )
181+ {
182+ return Logon ( user , domain , password , type , Logon32Provider . Default , groups ) ;
183+ }
184+
156185 /// <summary>
157186 /// Logon user using Kerberos Ticket.
158187 /// </summary>
0 commit comments