home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / subauth.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  11.7 KB  |  359 lines

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