SUBAUTH.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:11k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*++ BUILD Version: 0005     Increment this if a change has global effects
  2. Copyright (c) 1990-1997  Microsoft Corporation
  3. Module Name:
  4.     subauth.h
  5. Abstract:
  6.     This module defines types and macros for Subauthentication Packages.
  7. Revision History:
  8. --*/
  9. #ifndef _NTSUBAUTH_
  10. #define _NTSUBAUTH_
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. #ifndef _NTDEF_
  15. typedef LONG NTSTATUS, *PNTSTATUS;
  16. typedef struct _UNICODE_STRING {
  17.     USHORT Length;
  18.     USHORT MaximumLength;
  19.     PWSTR Buffer;
  20. } UNICODE_STRING, *PUNICODE_STRING;
  21. typedef struct _STRING {
  22.     USHORT Length;
  23.     USHORT MaximumLength;
  24.     PCHAR Buffer;
  25. } STRING, *PSTRING;
  26. typedef LARGE_INTEGER OLD_LARGE_INTEGER;
  27. typedef LARGE_INTEGER POLD_LARGE_INTEGER;
  28. #define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
  29. #endif
  30. typedef PVOID SAM_HANDLE, *PSAM_HANDLE;  
  31. //
  32. // User account control flags...
  33. //
  34. #define USER_ACCOUNT_DISABLED          (0x00000001)
  35. #define USER_HOME_DIRECTORY_REQUIRED   (0x00000002)
  36. #define USER_PASSWORD_NOT_REQUIRED     (0x00000004)
  37. #define USER_TEMP_DUPLICATE_ACCOUNT    (0x00000008)
  38. #define USER_NORMAL_ACCOUNT            (0x00000010)
  39. #define USER_MNS_LOGON_ACCOUNT         (0x00000020)
  40. #define USER_INTERDOMAIN_TRUST_ACCOUNT (0x00000040)
  41. #define USER_WORKSTATION_TRUST_ACCOUNT (0x00000080)
  42. #define USER_SERVER_TRUST_ACCOUNT      (0x00000100)
  43. #define USER_DONT_EXPIRE_PASSWORD      (0x00000200)
  44. #define USER_ACCOUNT_AUTO_LOCKED       (0x00000400)
  45. #define USER_MACHINE_ACCOUNT_MASK      
  46.             ( USER_INTERDOMAIN_TRUST_ACCOUNT |
  47.               USER_WORKSTATION_TRUST_ACCOUNT |
  48.               USER_SERVER_TRUST_ACCOUNT)
  49. #define USER_ACCOUNT_TYPE_MASK         
  50.             ( USER_TEMP_DUPLICATE_ACCOUNT |
  51.               USER_NORMAL_ACCOUNT |
  52.               USER_MACHINE_ACCOUNT_MASK )
  53. //
  54. // Logon times may be expressed in day, hour, or minute granularity.
  55. //
  56. //              Days per week    = 7
  57. //              Hours per week   = 168
  58. //              Minutes per week = 10080
  59. //
  60. #define SAM_DAYS_PER_WEEK    (7)
  61. #define SAM_HOURS_PER_WEEK   (24 * SAM_DAYS_PER_WEEK)
  62. #define SAM_MINUTES_PER_WEEK (60 * SAM_HOURS_PER_WEEK)
  63. typedef struct _LOGON_HOURS {
  64.     USHORT UnitsPerWeek;
  65.     //
  66.     // UnitsPerWeek is the number of equal length time units the week is
  67.     // divided into.  This value is used to compute the length of the bit
  68.     // string in logon_hours.  Must be less than or equal to
  69.     // SAM_UNITS_PER_WEEK (10080) for this release.
  70.     //
  71.     // LogonHours is a bit map of valid logon times.  Each bit represents
  72.     // a unique division in a week.  The largest bit map supported is 1260
  73.     // bytes (10080 bits), which represents minutes per week.  In this case
  74.     // the first bit (bit 0, byte 0) is Sunday, 00:00:00 - 00-00:59; bit 1,
  75.     // byte 0 is Sunday, 00:01:00 - 00:01:59, etc.  A NULL pointer means
  76.     // DONT_CHANGE for SamSetInformationUser() calls.
  77.     //
  78.     PUCHAR LogonHours;
  79. } LOGON_HOURS, *PLOGON_HOURS;
  80. typedef struct _SR_SECURITY_DESCRIPTOR {
  81.     ULONG Length;
  82.     PUCHAR SecurityDescriptor;
  83. } SR_SECURITY_DESCRIPTOR, *PSR_SECURITY_DESCRIPTOR;
  84. #include "pshpack4.h"
  85. typedef struct _USER_ALL_INFORMATION {
  86.     LARGE_INTEGER LastLogon;
  87.     LARGE_INTEGER LastLogoff;
  88.     LARGE_INTEGER PasswordLastSet;
  89.     LARGE_INTEGER AccountExpires;
  90.     LARGE_INTEGER PasswordCanChange;
  91.     LARGE_INTEGER PasswordMustChange;
  92.     UNICODE_STRING UserName;
  93.     UNICODE_STRING FullName;
  94.     UNICODE_STRING HomeDirectory;
  95.     UNICODE_STRING HomeDirectoryDrive;
  96.     UNICODE_STRING ScriptPath;
  97.     UNICODE_STRING ProfilePath;
  98.     UNICODE_STRING AdminComment;
  99.     UNICODE_STRING WorkStations;
  100.     UNICODE_STRING UserComment;
  101.     UNICODE_STRING Parameters;
  102.     UNICODE_STRING LmPassword;
  103.     UNICODE_STRING NtPassword;
  104.     UNICODE_STRING PrivateData;
  105.     SR_SECURITY_DESCRIPTOR SecurityDescriptor;
  106.     ULONG UserId;
  107.     ULONG PrimaryGroupId;
  108.     ULONG UserAccountControl;
  109.     ULONG WhichFields;
  110.     LOGON_HOURS LogonHours;
  111.     USHORT BadPasswordCount;
  112.     USHORT LogonCount;
  113.     USHORT CountryCode;
  114.     USHORT CodePage;
  115.     BOOLEAN LmPasswordPresent;
  116.     BOOLEAN NtPasswordPresent;
  117.     BOOLEAN PasswordExpired;
  118.     BOOLEAN PrivateDataSensitive;
  119. } USER_ALL_INFORMATION,  *PUSER_ALL_INFORMATION;
  120. #include "poppack.h"
  121. #define USER_ALL_PARAMETERS         0x00200000 
  122. #define CLEAR_BLOCK_LENGTH          8
  123. typedef struct _CLEAR_BLOCK {
  124.     CHAR    data[CLEAR_BLOCK_LENGTH];
  125. }                                   CLEAR_BLOCK;
  126. typedef CLEAR_BLOCK *               PCLEAR_BLOCK;
  127. #define CYPHER_BLOCK_LENGTH         8
  128. typedef struct _CYPHER_BLOCK {
  129.     CHAR    data[CYPHER_BLOCK_LENGTH];
  130. }                                   CYPHER_BLOCK;
  131. typedef CYPHER_BLOCK *              PCYPHER_BLOCK;
  132. typedef struct _LM_OWF_PASSWORD {
  133.     CYPHER_BLOCK data[2];
  134. }                                   LM_OWF_PASSWORD;
  135. typedef LM_OWF_PASSWORD *           PLM_OWF_PASSWORD;
  136. typedef CLEAR_BLOCK                 LM_CHALLENGE;
  137. typedef LM_CHALLENGE *              PLM_CHALLENGE;
  138. typedef LM_OWF_PASSWORD             NT_OWF_PASSWORD;
  139. typedef NT_OWF_PASSWORD *           PNT_OWF_PASSWORD;
  140. typedef LM_CHALLENGE                NT_CHALLENGE;
  141. typedef NT_CHALLENGE *              PNT_CHALLENGE;
  142. #define USER_SESSION_KEY_LENGTH     (CYPHER_BLOCK_LENGTH * 2)
  143. typedef struct _USER_SESSION_KEY {
  144.     CYPHER_BLOCK data[2];
  145. }                                   USER_SESSION_KEY;
  146. typedef USER_SESSION_KEY          * PUSER_SESSION_KEY;
  147. typedef enum _NETLOGON_LOGON_INFO_CLASS {
  148.     NetlogonInteractiveInformation = 1,
  149.     NetlogonNetworkInformation,
  150.     NetlogonServiceInformation,
  151.     NetlogonGenericInformation
  152. } NETLOGON_LOGON_INFO_CLASS;
  153. #pragma pack(4)
  154. typedef struct _NETLOGON_LOGON_IDENTITY_INFO {
  155.     UNICODE_STRING LogonDomainName;
  156.     ULONG ParameterControl;
  157.     OLD_LARGE_INTEGER  LogonId;
  158.     UNICODE_STRING UserName;
  159.     UNICODE_STRING Workstation;
  160. } NETLOGON_LOGON_IDENTITY_INFO,
  161.  *PNETLOGON_LOGON_IDENTITY_INFO;
  162. #pragma pack()
  163. #pragma pack(4)
  164. typedef struct _NETLOGON_INTERACTIVE_INFO {
  165.     NETLOGON_LOGON_IDENTITY_INFO Identity;
  166.     LM_OWF_PASSWORD LmOwfPassword;
  167.     NT_OWF_PASSWORD NtOwfPassword;
  168. } NETLOGON_INTERACTIVE_INFO,
  169.  *PNETLOGON_INTERACTIVE_INFO;
  170. #pragma pack()
  171. #pragma pack(4)
  172. typedef struct _NETLOGON_SERVICE_INFO {
  173.     NETLOGON_LOGON_IDENTITY_INFO Identity;
  174.     LM_OWF_PASSWORD LmOwfPassword;
  175.     NT_OWF_PASSWORD NtOwfPassword;
  176. } NETLOGON_SERVICE_INFO, *PNETLOGON_SERVICE_INFO;
  177. #pragma pack()
  178. #pragma pack(4)
  179. typedef struct _NETLOGON_NETWORK_INFO {
  180.     NETLOGON_LOGON_IDENTITY_INFO Identity;
  181.     LM_CHALLENGE LmChallenge;
  182.     STRING NtChallengeResponse;
  183.     STRING LmChallengeResponse;
  184. } NETLOGON_NETWORK_INFO, *PNETLOGON_NETWORK_INFO;
  185. #pragma pack()
  186. #pragma pack(4)
  187. typedef struct _NETLOGON_GENERIC_INFO {
  188.     NETLOGON_LOGON_IDENTITY_INFO Identity;
  189.     UNICODE_STRING PackageName;
  190.     ULONG DataLength;
  191. #ifdef MIDL_PASS
  192.     [size_is(DataLength)]
  193. #endif
  194.     PUCHAR LogonData;
  195. } NETLOGON_GENERIC_INFO, *PNETLOGON_GENERIC_INFO;
  196. #pragma pack()
  197. // Values for Flags
  198. #define MSV1_0_PASSTHRU     0x01
  199. #define MSV1_0_GUEST_LOGON  0x02
  200. NTSTATUS NTAPI
  201. Msv1_0SubAuthenticationRoutine(
  202.     IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
  203.     IN PVOID LogonInformation,
  204.     IN ULONG Flags,
  205.     IN PUSER_ALL_INFORMATION UserAll,
  206.     OUT PULONG WhichFields,
  207.     OUT PULONG UserFlags,
  208.     OUT PBOOLEAN Authoritative,
  209.     OUT PLARGE_INTEGER LogoffTime,
  210.     OUT PLARGE_INTEGER KickoffTime
  211. );
  212. typedef struct _MSV1_0_VALIDATION_INFO {
  213.     LARGE_INTEGER LogoffTime;
  214.     LARGE_INTEGER KickoffTime;
  215.     UNICODE_STRING LogonServer;
  216.     UNICODE_STRING LogonDomainName;
  217.     USER_SESSION_KEY SessionKey;
  218.     BOOLEAN Authoritative;
  219.     ULONG UserFlags;
  220.     ULONG WhichFields;
  221.     ULONG UserId;
  222. } MSV1_0_VALIDATION_INFO, *PMSV1_0_VALIDATION_INFO;
  223. // values for WhichFields
  224. #define MSV1_0_VALIDATION_LOGOFF_TIME          0x00000001
  225. #define MSV1_0_VALIDATION_KICKOFF_TIME         0x00000002
  226. #define MSV1_0_VALIDATION_LOGON_SERVER         0x00000004
  227. #define MSV1_0_VALIDATION_LOGON_DOMAIN         0x00000008
  228. #define MSV1_0_VALIDATION_SESSION_KEY          0x00000010
  229. #define MSV1_0_VALIDATION_USER_FLAGS           0x00000020
  230. #define MSV1_0_VALIDATION_USER_ID              0x00000040
  231. // legal values for ActionsPerformed
  232. #define MSV1_0_SUBAUTH_ACCOUNT_DISABLED        0x00000001
  233. #define MSV1_0_SUBAUTH_PASSWORD                0x00000002
  234. #define MSV1_0_SUBAUTH_WORKSTATIONS            0x00000004
  235. #define MSV1_0_SUBAUTH_LOGON_HOURS             0x00000008
  236. #define MSV1_0_SUBAUTH_ACCOUNT_EXPIRY          0x00000010
  237. #define MSV1_0_SUBAUTH_PASSWORD_EXPIRY         0x00000020
  238. #define MSV1_0_SUBAUTH_ACCOUNT_TYPE            0x00000040
  239. #define MSV1_0_SUBAUTH_LOCKOUT                 0x00000080
  240. NTSTATUS NTAPI
  241. Msv1_0SubAuthenticationRoutineEx(
  242.     IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
  243.     IN PVOID LogonInformation,
  244.     IN ULONG Flags,
  245.     IN PUSER_ALL_INFORMATION UserAll,
  246.     IN SAM_HANDLE UserHandle,
  247.     IN OUT PMSV1_0_VALIDATION_INFO ValidationInfo,
  248.     OUT PULONG ActionsPerformed
  249. );
  250. NTSTATUS NTAPI
  251. Msv1_0SubAuthenticationRoutineGeneric(
  252.     IN PVOID SubmitBuffer,
  253.     IN ULONG SubmitBufferLength,
  254.     OUT PULONG ReturnBufferLength,
  255.     OUT PVOID *ReturnBuffer
  256. );
  257. NTSTATUS NTAPI
  258. Msv1_0SubAuthenticationFilter(
  259.     IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
  260.     IN PVOID LogonInformation,
  261.     IN ULONG Flags,
  262.     IN PUSER_ALL_INFORMATION UserAll,
  263.     OUT PULONG WhichFields,
  264.     OUT PULONG UserFlags,
  265.     OUT PBOOLEAN Authoritative,
  266.     OUT PLARGE_INTEGER LogoffTime,
  267.     OUT PLARGE_INTEGER KickoffTime
  268. );
  269. #define STATUS_SUCCESS                          ((NTSTATUS)0x00000000L) 
  270. #define STATUS_INVALID_INFO_CLASS        ((NTSTATUS)0xC0000003L)    
  271. #define STATUS_ACCESS_VIOLATION          ((NTSTATUS)0xC0000005L)    
  272. #define STATUS_NO_SUCH_USER              ((NTSTATUS)0xC0000064L)     
  273. #define STATUS_WRONG_PASSWORD            ((NTSTATUS)0xC000006AL)     
  274. #define STATUS_PASSWORD_RESTRICTION      ((NTSTATUS)0xC000006CL)     
  275. #define STATUS_LOGON_FAILURE             ((NTSTATUS)0xC000006DL)     
  276. #define STATUS_ACCOUNT_RESTRICTION       ((NTSTATUS)0xC000006EL)     
  277. #define STATUS_INVALID_LOGON_HOURS       ((NTSTATUS)0xC000006FL)     
  278. #define STATUS_INVALID_WORKSTATION       ((NTSTATUS)0xC0000070L)     
  279. #define STATUS_PASSWORD_EXPIRED          ((NTSTATUS)0xC0000071L)     
  280. #define STATUS_ACCOUNT_DISABLED          ((NTSTATUS)0xC0000072L)     
  281. #define STATUS_INSUFFICIENT_RESOURCES    ((NTSTATUS)0xC000009AL)     
  282. #define STATUS_ACCOUNT_EXPIRED           ((NTSTATUS)0xC0000193L)    
  283. #define STATUS_PASSWORD_MUST_CHANGE      ((NTSTATUS)0xC0000224L)    
  284. #define STATUS_ACCOUNT_LOCKED_OUT        ((NTSTATUS)0xC0000234L)    
  285. #ifdef __cplusplus
  286. }
  287. #endif
  288. #endif /* _NTSUBAUTH_ */