home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / winbase / security / winnt / include / subauth.h < prev   
C/C++ Source or Header  |  1997-08-24  |  11KB  |  344 lines

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