home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / WIN_NT / LMAPI.ZIP / H / LMACCESS.H < prev    next >
Encoding:
C/C++ Source or Header  |  1993-04-07  |  34.6 KB  |  1,227 lines

  1. /*
  2.  
  3. Copyright (c) 1991-1993  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     lmaccess.h
  8.  
  9. Abstract:
  10.  
  11.     This file contains structures, function prototypes, and definitions
  12.     for the NetUser, NetUserModals, NetGroup, NetAccess, and NetLogon API.
  13.  
  14. Notes:
  15.  
  16.     You must include NETCONS.H before this file, since this file depends
  17.     on values defined in NETCONS.H.
  18.  
  19. --*/
  20.  
  21. //
  22. // User Class
  23. //
  24.  
  25. #ifndef _LMUSER_
  26. #define _LMUSER_
  27.  
  28. #include <lmcons.h>     // unfortunately created a dependence on this
  29.  
  30. //
  31. // Function Prototypes - User
  32. //
  33.  
  34. NET_API_STATUS NET_API_FUNCTION
  35. NetUserAdd (
  36.     IN  LPWSTR     servername OPTIONAL,
  37.     IN  DWORD      level,
  38.     IN  LPBYTE     buf,
  39.     OUT LPDWORD    parm_err OPTIONAL
  40.     );
  41.  
  42. NET_API_STATUS NET_API_FUNCTION
  43. NetUserEnum (
  44.     IN  LPWSTR     servername OPTIONAL,
  45.     IN  DWORD      level,
  46.     IN  DWORD      filter,
  47.     OUT LPBYTE     *bufptr,
  48.     IN  DWORD      prefmaxlen,
  49.     OUT LPDWORD    entriesread,
  50.     OUT LPDWORD    totalentries,
  51.     IN OUT LPDWORD resume_handle OPTIONAL
  52.     );
  53.  
  54. NET_API_STATUS NET_API_FUNCTION
  55. NetUserGetInfo (
  56.     IN  LPWSTR     servername OPTIONAL,
  57.     IN  LPWSTR     username,
  58.     IN  DWORD      level,
  59.     OUT LPBYTE     *bufptr
  60.     );
  61.  
  62. NET_API_STATUS NET_API_FUNCTION
  63. NetUserSetInfo (
  64.     IN  LPWSTR    servername OPTIONAL,
  65.     IN  LPWSTR    username,
  66.     IN  DWORD     level,
  67.     IN  LPBYTE    buf,
  68.     OUT LPDWORD   parm_err OPTIONAL
  69.     );
  70.  
  71. NET_API_STATUS NET_API_FUNCTION
  72. NetUserDel (
  73.     IN  LPWSTR    servername OPTIONAL,
  74.     IN  LPWSTR    username
  75.     );
  76.  
  77. NET_API_STATUS NET_API_FUNCTION
  78. NetUserGetGroups (
  79.     IN  LPWSTR    servername OPTIONAL,
  80.     IN  LPWSTR    username,
  81.     IN  DWORD     level,
  82.     OUT LPBYTE    *bufptr,
  83.     IN  DWORD     prefmaxlen,
  84.     OUT LPDWORD   entriesread,
  85.     OUT LPDWORD   totalentries
  86.     );
  87.  
  88. NET_API_STATUS NET_API_FUNCTION
  89. NetUserSetGroups (
  90.     IN  LPWSTR    servername OPTIONAL,
  91.     IN  LPWSTR    username,
  92.     IN  DWORD     level,
  93.     IN  LPBYTE    buf,
  94.     IN  DWORD     num_entries
  95.     );
  96.  
  97. NET_API_STATUS NET_API_FUNCTION
  98. NetUserGetLocalGroups (
  99.     IN  LPWSTR    servername OPTIONAL,
  100.     IN  LPWSTR    username,
  101.     IN  DWORD     level,
  102.     IN  DWORD     flags,
  103.     OUT LPBYTE    *bufptr,
  104.     IN  DWORD     prefmaxlen,
  105.     OUT LPDWORD   entriesread,
  106.     OUT LPDWORD   totalentries
  107.     );
  108.  
  109. NET_API_STATUS NET_API_FUNCTION
  110. NetUserModalsGet (
  111.     IN  LPWSTR    servername OPTIONAL,
  112.     IN  DWORD     level,
  113.     OUT LPBYTE    *bufptr
  114.     );
  115.  
  116. NET_API_STATUS NET_API_FUNCTION
  117. NetUserModalsSet (
  118.     IN  LPWSTR    servername OPTIONAL,
  119.     IN  DWORD     level,
  120.     IN  LPBYTE    buf,
  121.     OUT LPDWORD   parm_err OPTIONAL
  122.     );
  123.  
  124. //
  125. //  Data Structures - User
  126. //
  127.  
  128. typedef struct _USER_INFO_0 {
  129.     LPWSTR   usri0_name;
  130. }USER_INFO_0, *PUSER_INFO_0, *LPUSER_INFO_0;
  131.  
  132. typedef struct _USER_INFO_1 {
  133.     LPWSTR   usri1_name;
  134.     LPWSTR   usri1_password;
  135.     DWORD    usri1_password_age;
  136.     DWORD    usri1_priv;
  137.     LPWSTR   usri1_home_dir;
  138.     LPWSTR   usri1_comment;
  139.     DWORD    usri1_flags;
  140.     LPWSTR   usri1_script_path;
  141. }USER_INFO_1, *PUSER_INFO_1, *LPUSER_INFO_1;
  142.  
  143. typedef struct _USER_INFO_2 {
  144.     LPWSTR   usri2_name;
  145.     LPWSTR   usri2_password;
  146.     DWORD    usri2_password_age;
  147.     DWORD    usri2_priv;
  148.     LPWSTR   usri2_home_dir;
  149.     LPWSTR   usri2_comment;
  150.     DWORD    usri2_flags;
  151.     LPWSTR   usri2_script_path;
  152.     DWORD    usri2_auth_flags;
  153.     LPWSTR   usri2_full_name;
  154.     LPWSTR   usri2_usr_comment;
  155.     LPWSTR   usri2_parms;
  156.     LPWSTR   usri2_workstations;
  157.     DWORD    usri2_last_logon;
  158.     DWORD    usri2_last_logoff;
  159.     DWORD    usri2_acct_expires;
  160.     DWORD    usri2_max_storage;
  161.     DWORD    usri2_units_per_week;
  162.     PBYTE    usri2_logon_hours;
  163.     DWORD    usri2_bad_pw_count;
  164.     DWORD    usri2_num_logons;
  165.     LPWSTR   usri2_logon_server;
  166.     DWORD    usri2_country_code;
  167.     DWORD    usri2_code_page;
  168. }USER_INFO_2, *PUSER_INFO_2, *LPUSER_INFO_2;
  169.  
  170. typedef struct _USER_INFO_3 {
  171.     LPWSTR   usri3_name;
  172.     LPWSTR   usri3_password;
  173.     DWORD    usri3_password_age;
  174.     DWORD    usri3_priv;
  175.     LPWSTR   usri3_home_dir;
  176.     LPWSTR   usri3_comment;
  177.     DWORD    usri3_flags;
  178.     LPWSTR   usri3_script_path;
  179.     DWORD    usri3_auth_flags;
  180.     LPWSTR   usri3_full_name;
  181.     LPWSTR   usri3_usr_comment;
  182.     LPWSTR   usri3_parms;
  183.     LPWSTR   usri3_workstations;
  184.     DWORD    usri3_last_logon;
  185.     DWORD    usri3_last_logoff;
  186.     DWORD    usri3_acct_expires;
  187.     DWORD    usri3_max_storage;
  188.     DWORD    usri3_units_per_week;
  189.     PBYTE    usri3_logon_hours;
  190.     DWORD    usri3_bad_pw_count;
  191.     DWORD    usri3_num_logons;
  192.     LPWSTR   usri3_logon_server;
  193.     DWORD    usri3_country_code;
  194.     DWORD    usri3_code_page;
  195.     DWORD    usri3_user_id;
  196.     DWORD    usri3_primary_group_id;
  197.     LPWSTR   usri3_profile;
  198.     LPWSTR   usri3_home_dir_drive;
  199.     DWORD    usri3_password_expired;
  200. }USER_INFO_3, *PUSER_INFO_3, *LPUSER_INFO_3;
  201.  
  202. typedef struct _USER_INFO_10 {
  203.     LPWSTR   usri10_name;
  204.     LPWSTR   usri10_comment;
  205.     LPWSTR   usri10_usr_comment;
  206.     LPWSTR   usri10_full_name;
  207. }USER_INFO_10, *PUSER_INFO_10, *LPUSER_INFO_10;
  208.  
  209. typedef struct _USER_INFO_11 {
  210.     LPWSTR   usri11_name;
  211.     LPWSTR   usri11_comment;
  212.     LPWSTR   usri11_usr_comment;
  213.     LPWSTR   usri11_full_name;
  214.     DWORD    usri11_priv;
  215.     DWORD    usri11_auth_flags;
  216.     DWORD    usri11_password_age;
  217.     LPWSTR   usri11_home_dir;
  218.     LPWSTR   usri11_parms;
  219.     DWORD    usri11_last_logon;
  220.     DWORD    usri11_last_logoff;
  221.     DWORD    usri11_bad_pw_count;
  222.     DWORD    usri11_num_logons;
  223.     LPWSTR   usri11_logon_server;
  224.     DWORD    usri11_country_code;
  225.     LPWSTR   usri11_workstations;
  226.     DWORD    usri11_max_storage;
  227.     DWORD    usri11_units_per_week;
  228.     PBYTE    usri11_logon_hours;
  229.     DWORD    usri11_code_page;
  230. }USER_INFO_11, *PUSER_INFO_11, *LPUSER_INFO_11;
  231.  
  232. typedef struct _USER_INFO_20 {
  233.     LPWSTR   usri20_name;
  234.     LPWSTR   usri20_full_name;
  235.     LPWSTR   usri20_comment;
  236.     DWORD    usri20_flags;
  237.     DWORD    usri20_user_id;
  238. }USER_INFO_20, *PUSER_INFO_20, *LPUSER_INFO_20;
  239.  
  240. typedef struct _USER_INFO_21 {
  241.     BYTE     usri21_password[ENCRYPTED_PWLEN];
  242. }USER_INFO_21, *PUSER_INFO_21, *LPUSER_INFO_21;
  243.  
  244. typedef struct _USER_INFO_22 {
  245.     LPWSTR   usri22_name;
  246.     BYTE     usri22_password[ENCRYPTED_PWLEN];
  247.     DWORD    usri22_password_age;
  248.     DWORD    usri22_priv;
  249.     LPWSTR   usri22_home_dir;
  250.     LPWSTR   usri22_comment;
  251.     DWORD    usri22_flags;
  252.     LPWSTR   usri22_script_path;
  253.     DWORD    usri22_auth_flags;
  254.     LPWSTR   usri22_full_name;
  255.     LPWSTR   usri22_usr_comment;
  256.     LPWSTR   usri22_parms;
  257.     LPWSTR   usri22_workstations;
  258.     DWORD    usri22_last_logon;
  259.     DWORD    usri22_last_logoff;
  260.     DWORD    usri22_acct_expires;
  261.     DWORD    usri22_max_storage;
  262.     DWORD    usri22_units_per_week;
  263.     PBYTE    usri22_logon_hours;
  264.     DWORD    usri22_bad_pw_count;
  265.     DWORD    usri22_num_logons;
  266.     LPWSTR   usri22_logon_server;
  267.     DWORD    usri22_country_code;
  268.     DWORD    usri22_code_page;
  269. }USER_INFO_22, *PUSER_INFO_22, *LPUSER_INFO_22;
  270.  
  271. typedef struct _USER_INFO_1003 {
  272.      LPWSTR  usri1003_password;
  273. } USER_INFO_1003, *PUSER_INFO_1003, *LPUSER_INFO_1003;
  274.  
  275. typedef struct _USER_INFO_1005 {
  276.      DWORD   usri1005_priv;
  277. } USER_INFO_1005, *PUSER_INFO_1005, *LPUSER_INFO_1005;
  278.  
  279. typedef struct _USER_INFO_1006 {
  280.      LPWSTR  usri1006_home_dir;
  281. } USER_INFO_1006, *PUSER_INFO_1006, *LPUSER_INFO_1006;
  282.  
  283. typedef struct _USER_INFO_1007 {
  284.      LPWSTR  usri1007_comment;
  285. } USER_INFO_1007, *PUSER_INFO_1007, *LPUSER_INFO_1007;
  286.  
  287. typedef struct _USER_INFO_1008 {
  288.      DWORD   usri1008_flags;
  289. } USER_INFO_1008, *PUSER_INFO_1008, *LPUSER_INFO_1008;
  290.  
  291. typedef struct _USER_INFO_1009 {
  292.      LPWSTR  usri1009_script_path;
  293. } USER_INFO_1009, *PUSER_INFO_1009, *LPUSER_INFO_1009;
  294.  
  295. typedef struct _USER_INFO_1010 {
  296.      DWORD   usri1010_auth_flags;
  297. } USER_INFO_1010, *PUSER_INFO_1010, *LPUSER_INFO_1010;
  298.  
  299. typedef struct _USER_INFO_1011 {
  300.      LPWSTR  usri1011_full_name;
  301. } USER_INFO_1011, *PUSER_INFO_1011, *LPUSER_INFO_1011;
  302.  
  303. typedef struct _USER_INFO_1012 {
  304.      LPWSTR  usri1012_usr_comment;
  305. } USER_INFO_1012, *PUSER_INFO_1012, *LPUSER_INFO_1012;
  306.  
  307. typedef struct _USER_INFO_1013 {
  308.      LPWSTR  usri1013_parms;
  309. } USER_INFO_1013, *PUSER_INFO_1013, *LPUSER_INFO_1013;
  310.  
  311. typedef struct _USER_INFO_1014 {
  312.      LPWSTR  usri1014_workstations;
  313. } USER_INFO_1014, *PUSER_INFO_1014, *LPUSER_INFO_1014;
  314.  
  315. typedef struct _USER_INFO_1017 {
  316.      DWORD   usri1017_acct_expires;
  317. } USER_INFO_1017, *PUSER_INFO_1017, *LPUSER_INFO_1017;
  318.  
  319. typedef struct _USER_INFO_1018 {
  320.      DWORD   usri1018_max_storage;
  321. } USER_INFO_1018, *PUSER_INFO_1018, *LPUSER_INFO_1018;
  322.  
  323. typedef struct _USER_INFO_1020 {
  324.     DWORD   usri1020_units_per_week;
  325.     LPBYTE  usri1020_logon_hours;
  326. } USER_INFO_1020, *PUSER_INFO_1020, *LPUSER_INFO_1020;
  327.  
  328. typedef struct _USER_INFO_1023 {
  329.      LPWSTR  usri1023_logon_server;
  330. } USER_INFO_1023, *PUSER_INFO_1023, *LPUSER_INFO_1023;
  331.  
  332. typedef struct _USER_INFO_1024 {
  333.      DWORD   usri1024_country_code;
  334. } USER_INFO_1024, *PUSER_INFO_1024, *LPUSER_INFO_1024;
  335.  
  336. typedef struct _USER_INFO_1025 {
  337.      DWORD   usri1025_code_page;
  338. } USER_INFO_1025, *PUSER_INFO_1025, *LPUSER_INFO_1025;
  339.  
  340. typedef struct _USER_INFO_1051 {
  341.      DWORD   usri1051_primary_group_id;
  342. } USER_INFO_1051, *PUSER_INFO_1051, *LPUSER_INFO_1051;
  343.  
  344. typedef struct _USER_INFO_1052 {
  345.      LPWSTR  usri1052_profile;
  346. } USER_INFO_1052, *PUSER_INFO_1052, *LPUSER_INFO_1052;
  347.  
  348. typedef struct _USER_INFO_1053 {
  349.      LPWSTR  usri1053_home_dir_drive;
  350. } USER_INFO_1053, *PUSER_INFO_1053, *LPUSER_INFO_1053;
  351.  
  352.  
  353. //
  354. //  Data Structures - User Modals
  355. //
  356.  
  357. typedef struct _USER_MODALS_INFO_0 {
  358.     DWORD    usrmod0_min_passwd_len;
  359.     DWORD    usrmod0_max_passwd_age;
  360.     DWORD    usrmod0_min_passwd_age;
  361.     DWORD    usrmod0_force_logoff;
  362.     DWORD    usrmod0_password_hist_len;
  363. }USER_MODALS_INFO_0, *PUSER_MODALS_INFO_0, *LPUSER_MODALS_INFO_0;
  364.  
  365. typedef struct _USER_MODALS_INFO_1 {
  366.     DWORD    usrmod1_role;
  367.     LPWSTR   usrmod1_primary;
  368. }USER_MODALS_INFO_1, *PUSER_MODALS_INFO_1, *LPUSER_MODALS_INFO_1;
  369.  
  370. typedef struct _USER_MODALS_INFO_2 {
  371.     LPWSTR  usrmod2_domain_name;
  372.     PSID    usrmod2_domain_id;
  373. }USER_MODALS_INFO_2, *PUSER_MODALS_INFO_2, *LPUSER_MODALS_INFO_2;
  374.  
  375. typedef struct _USER_MODALS_INFO_1001 {
  376.      DWORD   usrmod1001_min_passwd_len;
  377. } USER_MODALS_INFO_1001, *PUSER_MODALS_INFO_1001, *LPUSER_MODALS_INFO_1001;
  378.  
  379. typedef struct _USER_MODALS_INFO_1002 {
  380.      DWORD   usrmod1002_max_passwd_age;
  381. } USER_MODALS_INFO_1002, *PUSER_MODALS_INFO_1002, *LPUSER_MODALS_INFO_1002;
  382.  
  383. typedef struct _USER_MODALS_INFO_1003 {
  384.      DWORD   usrmod1003_min_passwd_age;
  385. } USER_MODALS_INFO_1003, *PUSER_MODALS_INFO_1003, *LPUSER_MODALS_INFO_1003;
  386.  
  387. typedef struct _USER_MODALS_INFO_1004 {
  388.      DWORD   usrmod1004_force_logoff;
  389. } USER_MODALS_INFO_1004, *PUSER_MODALS_INFO_1004, *LPUSER_MODALS_INFO_1004;
  390.  
  391. typedef struct _USER_MODALS_INFO_1005 {
  392.      DWORD   usrmod1005_password_hist_len;
  393. } USER_MODALS_INFO_1005, *PUSER_MODALS_INFO_1005, *LPUSER_MODALS_INFO_1005;
  394.  
  395. typedef struct _USER_MODALS_INFO_1006 {
  396.      DWORD   usrmod1006_role;
  397. } USER_MODALS_INFO_1006, *PUSER_MODALS_INFO_1006, *LPUSER_MODALS_INFO_1006;
  398.  
  399. typedef struct _USER_MODALS_INFO_1007 {
  400.      LPWSTR  usrmod1007_primary;
  401. } USER_MODALS_INFO_1007, *PUSER_MODALS_INFO_1007, *LPUSER_MODALS_INFO_1007;
  402.  
  403.  
  404. //
  405. // Special Values and Constants - User
  406. //
  407.  
  408. //
  409. //  Bit masks for field usriX_flags of USER_INFO_X (X = 0/1).
  410. //
  411.  
  412. #define UF_SCRIPT               0x0001
  413. #define UF_ACCOUNTDISABLE       0x0002
  414. #define UF_HOMEDIR_REQUIRED     0x0008
  415. #define UF_LOCKOUT              0x0010
  416. #define UF_PASSWD_NOTREQD       0x0020
  417. #define UF_PASSWD_CANT_CHANGE   0x0040
  418.  
  419. //
  420. // Account type bits as part of usri_flags.
  421. //
  422.  
  423. #define UF_TEMP_DUPLICATE_ACCOUNT       0x0100
  424. #define UF_NORMAL_ACCOUNT               0x0200
  425. #define UF_INTERDOMAIN_TRUST_ACCOUNT    0x0800
  426. #define UF_WORKSTATION_TRUST_ACCOUNT    0x1000
  427. #define UF_SERVER_TRUST_ACCOUNT         0x2000
  428.  
  429. #define UF_MACHINE_ACCOUNT_MASK ( UF_INTERDOMAIN_TRUST_ACCOUNT | \
  430.                                   UF_WORKSTATION_TRUST_ACCOUNT | \
  431.                                   UF_SERVER_TRUST_ACCOUNT )
  432.  
  433. #define UF_ACCOUNT_TYPE_MASK         ( \
  434.                     UF_TEMP_DUPLICATE_ACCOUNT | \
  435.                     UF_NORMAL_ACCOUNT | \
  436.                     UF_INTERDOMAIN_TRUST_ACCOUNT | \
  437.                     UF_WORKSTATION_TRUST_ACCOUNT | \
  438.                     UF_SERVER_TRUST_ACCOUNT \
  439.                 )
  440.  
  441. #define UF_DONT_EXPIRE_PASSWD           0x10000
  442.  
  443.  
  444. #define UF_SETTABLE_BITS        ( \
  445.                     UF_SCRIPT | \
  446.                     UF_ACCOUNTDISABLE | \
  447.                     UF_HOMEDIR_REQUIRED  | \
  448.                     UF_PASSWD_NOTREQD | \
  449.                     UF_PASSWD_CANT_CHANGE | \
  450.                     UF_ACCOUNT_TYPE_MASK | \
  451.                     UF_DONT_EXPIRE_PASSWD \
  452.                 )
  453.  
  454. //
  455. // bit masks for the NetUserEnum filter parameter.
  456. //
  457.  
  458. #define FILTER_TEMP_DUPLICATE_ACCOUNT       (0x0001)
  459. #define FILTER_NORMAL_ACCOUNT               (0x0002)
  460. // #define FILTER_PROXY_ACCOUNT                (0x0004)
  461. #define FILTER_INTERDOMAIN_TRUST_ACCOUNT    (0x0008)
  462. #define FILTER_WORKSTATION_TRUST_ACCOUNT    (0x0010)
  463. #define FILTER_SERVER_TRUST_ACCOUNT         (0x0020)
  464.  
  465. //
  466. // bit masks for the NetUserGetLocalGroups flags
  467. //
  468. #define LG_INCLUDE_INDIRECT         (0x0001)
  469.  
  470. //
  471. //  Bit masks for field usri2_auth_flags of USER_INFO_2.
  472. //
  473.  
  474. #define AF_OP_PRINT             0x1
  475. #define AF_OP_COMM              0x2
  476. #define AF_OP_SERVER            0x4
  477. #define AF_OP_ACCOUNTS          0x8
  478. #define AF_SETTABLE_BITS        (AF_OP_PRINT | AF_OP_COMM | \
  479.                                 AF_OP_SERVER | AF_OP_ACCOUNTS)
  480.  
  481. //
  482. //  UAS role manifests under NETLOGON
  483. //
  484.  
  485. #define UAS_ROLE_STANDALONE     0
  486. #define UAS_ROLE_MEMBER         1
  487. #define UAS_ROLE_BACKUP         2
  488. #define UAS_ROLE_PRIMARY        3
  489.  
  490. //
  491. //  Values for ParmError for NetUserSetInfo.
  492. //
  493.  
  494. #define USER_NAME_PARMNUM               1
  495. #define USER_PASSWORD_PARMNUM           3
  496. #define USER_PASSWORD_AGE_PARMNUM       4
  497. #define USER_PRIV_PARMNUM               5
  498. #define USER_HOME_DIR_PARMNUM           6
  499. #define USER_COMMENT_PARMNUM            7
  500. #define USER_FLAGS_PARMNUM              8
  501. #define USER_SCRIPT_PATH_PARMNUM        9
  502. #define USER_AUTH_FLAGS_PARMNUM         10
  503. #define USER_FULL_NAME_PARMNUM          11
  504. #define USER_USR_COMMENT_PARMNUM        12
  505. #define USER_PARMS_PARMNUM              13
  506. #define USER_WORKSTATIONS_PARMNUM       14
  507. #define USER_LAST_LOGON_PARMNUM         15
  508. #define USER_LAST_LOGOFF_PARMNUM        16
  509. #define USER_ACCT_EXPIRES_PARMNUM       17
  510. #define USER_MAX_STORAGE_PARMNUM        18
  511. #define USER_UNITS_PER_WEEK_PARMNUM     19
  512. #define USER_LOGON_HOURS_PARMNUM        20
  513. #define USER_PAD_PW_COUNT_PARMNUM       21
  514. #define USER_NUM_LOGONS_PARMNUM         22
  515. #define USER_LOGON_SERVER_PARMNUM       23
  516. #define USER_COUNTRY_CODE_PARMNUM       24
  517. #define USER_CODE_PAGE_PARMNUM          25
  518. #define USER_PRIMARY_GROUP_PARMNUM      51
  519. #define USER_PROFILE                    52
  520. #define USER_PROFILE_PARMNUM            52
  521. #define USER_HOME_DIR_DRIVE_PARMNUM     53
  522.  
  523. //
  524. // the new infolevel counterparts of the old info level + parmnum
  525. //
  526.  
  527. #define USER_NAME_INFOLEVEL             \
  528.             (PARMNUM_BASE_INFOLEVEL + USER_NAME_PARMNUM)
  529. #define USER_PASSWORD_INFOLEVEL         \
  530.             (PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_PARMNUM)
  531. #define USER_PASSWORD_AGE_INFOLEVEL     \
  532.             (PARMNUM_BASE_INFOLEVEL + USER_PASSWORD_AGE_PARMNUM)
  533. #define USER_PRIV_INFOLEVEL             \
  534.             (PARMNUM_BASE_INFOLEVEL + USER_PRIV_PARMNUM)
  535. #define USER_HOME_DIR_INFOLEVEL         \
  536.             (PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_PARMNUM)
  537. #define USER_COMMENT_INFOLEVEL          \
  538.             (PARMNUM_BASE_INFOLEVEL + USER_COMMENT_PARMNUM)
  539. #define USER_FLAGS_INFOLEVEL            \
  540.             (PARMNUM_BASE_INFOLEVEL + USER_FLAGS_PARMNUM)
  541. #define USER_SCRIPT_PATH_INFOLEVEL      \
  542.             (PARMNUM_BASE_INFOLEVEL + USER_SCRIPT_PATH_PARMNUM)
  543. #define USER_AUTH_FLAGS_INFOLEVEL       \
  544.             (PARMNUM_BASE_INFOLEVEL + USER_AUTH_FLAGS_PARMNUM)
  545. #define USER_FULL_NAME_INFOLEVEL        \
  546.             (PARMNUM_BASE_INFOLEVEL + USER_FULL_NAME_PARMNUM)
  547. #define USER_USR_COMMENT_INFOLEVEL      \
  548.             (PARMNUM_BASE_INFOLEVEL + USER_USR_COMMENT_PARMNUM)
  549. #define USER_PARMS_INFOLEVEL            \
  550.             (PARMNUM_BASE_INFOLEVEL + USER_PARMS_PARMNUM)
  551. #define USER_WORKSTATIONS_INFOLEVEL     \
  552.             (PARMNUM_BASE_INFOLEVEL + USER_WORKSTATIONS_PARMNUM)
  553. #define USER_LAST_LOGON_INFOLEVEL       \
  554.             (PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGON_PARMNUM)
  555. #define USER_LAST_LOGOFF_INFOLEVEL      \
  556.             (PARMNUM_BASE_INFOLEVEL + USER_LAST_LOGOFF_PARMNUM)
  557. #define USER_ACCT_EXPIRES_INFOLEVEL     \
  558.             (PARMNUM_BASE_INFOLEVEL + USER_ACCT_EXPIRES_PARMNUM)
  559. #define USER_MAX_STORAGE_INFOLEVEL      \
  560.             (PARMNUM_BASE_INFOLEVEL + USER_MAX_STORAGE_PARMNUM)
  561. #define USER_UNITS_PER_WEEK_INFOLEVEL   \
  562.             (PARMNUM_BASE_INFOLEVEL + USER_UNITS_PER_WEEK_PARMNUM)
  563. #define USER_LOGON_HOURS_INFOLEVEL      \
  564.             (PARMNUM_BASE_INFOLEVEL + USER_LOGON_HOURS_PARMNUM)
  565. #define USER_PAD_PW_COUNT_INFOLEVEL     \
  566.             (PARMNUM_BASE_INFOLEVEL + USER_PAD_PW_COUNT_PARMNUM)
  567. #define USER_NUM_LOGONS_INFOLEVEL       \
  568.             (PARMNUM_BASE_INFOLEVEL + USER_NUM_LOGONS_PARMNUM)
  569. #define USER_LOGON_SERVER_INFOLEVEL     \
  570.             (PARMNUM_BASE_INFOLEVEL + USER_LOGON_SERVER_PARMNUM)
  571. #define USER_COUNTRY_CODE_INFOLEVEL     \
  572.             (PARMNUM_BASE_INFOLEVEL + USER_COUNTRY_CODE_PARMNUM)
  573. #define USER_CODE_PAGE_INFOLEVEL        \
  574.             (PARMNUM_BASE_INFOLEVEL + USER_CODE_PAGE_PARMNUM)
  575. #define USER_PRIMARY_GROUP_INFOLEVEL    \
  576.             (PARMNUM_BASE_INFOLEVEL + USER_PRIMARY_GROUP_PARMNUM)
  577. #define USER_POSIX_ID_INFOLEVEL         \
  578.             (PARMNUM_BASE_INFOLEVEL + USER_POSIX_ID_PARMNUM)
  579. #define USER_HOME_DIR_DRIVE_INFOLEVEL         \
  580.             (PARMNUM_BASE_INFOLEVEL + USER_HOME_DIR_DRIVE_PARMNUM)
  581.  
  582. //
  583. //  For SetInfo call (parmnum 0) when password change not required
  584. //
  585.  
  586. #define NULL_USERSETINFO_PASSWD     "              "
  587.  
  588. #define TIMEQ_FOREVER               ((unsigned long) -1L)
  589. #define USER_MAXSTORAGE_UNLIMITED   ((unsigned long) -1L)
  590. #define USER_NO_LOGOFF              ((unsigned long) -1L)
  591. #define UNITS_PER_DAY               24
  592. #define UNITS_PER_WEEK              UNITS_PER_DAY * 7
  593.  
  594. //
  595. // Privilege levels (USER_INFO_X field usriX_priv (X = 0/1)).
  596. //
  597.  
  598. #define USER_PRIV_MASK      0x3
  599. #define USER_PRIV_GUEST     0
  600. #define USER_PRIV_USER      1
  601. #define USER_PRIV_ADMIN     2
  602.  
  603. //
  604. // user modals related defaults
  605. //
  606.  
  607. #define MAX_PASSWD_LEN      PWLEN
  608. #define DEF_MIN_PWLEN       6
  609. #define DEF_PWUNIQUENESS    5
  610. #define DEF_MAX_PWHIST      8
  611.  
  612. #define DEF_MAX_PWAGE       TIMEQ_FOREVER               // forever
  613. #define DEF_MIN_PWAGE       (unsigned long) 0L          // 0 days
  614. #define DEF_FORCE_LOGOFF    (unsigned long) 0xffffffff  // never
  615. #define DEF_MAX_BADPW       0                           // no limit
  616. #define ONE_DAY             (unsigned long) 01*24*3600  // 01 day
  617.  
  618. //
  619. // User Logon Validation (codes returned)
  620. //
  621.  
  622. #define VALIDATED_LOGON         0
  623. #define PASSWORD_EXPIRED        2
  624. #define NON_VALIDATED_LOGON     3
  625.  
  626. #define VALID_LOGOFF            1
  627.  
  628. //
  629. // parmnum manifests for user modals
  630. //
  631.  
  632. #define MODALS_MIN_PASSWD_LEN_PARMNUM       1
  633. #define MODALS_MAX_PASSWD_AGE_PARMNUM       2
  634. #define MODALS_MIN_PASSWD_AGE_PARMNUM       3
  635. #define MODALS_FORCE_LOGOFF_PARMNUM         4
  636. #define MODALS_PASSWD_HIST_LEN_PARMNUM      5
  637. #define MODALS_ROLE_PARMNUM                 6
  638. #define MODALS_PRIMARY_PARMNUM              7
  639. #define MODALS_DOMAIN_NAME_PARMNUM          8
  640. #define MODALS_DOMAIN_ID_PARMNUM            9
  641.  
  642. //
  643. // the new infolevel counterparts of the old info level + parmnum
  644. //
  645.  
  646. #define MODALS_MIN_PASSWD_LEN_INFOLEVEL     \
  647.             (PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_LEN_PARMNUM)
  648. #define MODALS_MAX_PASSWD_AGE_INFOLEVEL     \
  649.             (PARMNUM_BASE_INFOLEVEL + MODALS_MAX_PASSWD_AGE_PARMNUM)
  650. #define MODALS_MIN_PASSWD_AGE_INFOLEVEL     \
  651.             (PARMNUM_BASE_INFOLEVEL + MODALS_MIN_PASSWD_AGE_PARMNUM)
  652. #define MODALS_FORCE_LOGOFF_INFOLEVEL       \
  653.             (PARMNUM_BASE_INFOLEVEL + MODALS_FORCE_LOGOFF_PARMNUM)
  654. #define MODALS_PASSWD_HIST_LEN_INFOLEVEL    \
  655.             (PARMNUM_BASE_INFOLEVEL + MODALS_PASSWD_HIST_LEN_PARMNUM)
  656. #define MODALS_ROLE_INFOLEVEL               \
  657.             (PARMNUM_BASE_INFOLEVEL + MODALS_ROLE_PARMNUM)
  658. #define MODALS_PRIMARY_INFOLEVEL            \
  659.             (PARMNUM_BASE_INFOLEVEL + MODALS_PRIMARY_PARMNUM)
  660. #define MODALS_DOMAIN_NAME_INFOLEVEL        \
  661.             (PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_NAME_PARMNUM)
  662. #define MODALS_DOMAIN_ID_INFOLEVEL          \
  663.             (PARMNUM_BASE_INFOLEVEL + MODALS_DOMAIN_ID_PARMNUM)
  664.  
  665. #endif // _LMUSER_
  666.  
  667. //
  668. // Group Class
  669. //
  670.  
  671. #ifndef _LMGROUP_
  672. #define _LMGROUP_
  673.  
  674. //
  675. // Function Prototypes
  676. //
  677.  
  678. NET_API_STATUS NET_API_FUNCTION
  679. NetGroupAdd (
  680.     IN  LPWSTR   servername OPTIONAL,
  681.     IN  DWORD    level,
  682.     IN  LPBYTE   buf,
  683.     OUT LPDWORD  parm_err OPTIONAL
  684.     );
  685.  
  686. NET_API_STATUS NET_API_FUNCTION
  687. NetGroupAddUser (
  688.     IN  LPWSTR   servername OPTIONAL,
  689.     IN  LPWSTR   GroupName,
  690.     IN  LPWSTR   username
  691.     );
  692.  
  693. NET_API_STATUS NET_API_FUNCTION
  694. NetGroupEnum (
  695.     IN  LPWSTR      servername OPTIONAL,
  696.     IN  DWORD       level,
  697.     OUT LPBYTE      *bufptr,
  698.     IN  DWORD       prefmaxlen,
  699.     OUT LPDWORD     entriesread,
  700.     OUT LPDWORD     totalentries,
  701.     IN OUT LPDWORD  resume_handle OPTIONAL
  702.     );
  703.  
  704. NET_API_STATUS NET_API_FUNCTION
  705. NetGroupGetInfo (
  706.     IN  LPWSTR   servername OPTIONAL,
  707.     IN  LPWSTR   groupname,
  708.     IN  DWORD    level,
  709.     OUT LPBYTE   *bufptr
  710.     );
  711.  
  712. NET_API_STATUS NET_API_FUNCTION
  713. NetGroupSetInfo (
  714.     IN  LPWSTR   servername OPTIONAL,
  715.     IN  LPWSTR   groupname,
  716.     IN  DWORD    level,
  717.     IN  LPBYTE   buf,
  718.     OUT LPDWORD  parm_err OPTIONAL
  719.     );
  720.  
  721. NET_API_STATUS NET_API_FUNCTION
  722. NetGroupDel (
  723.     IN  LPWSTR   servername OPTIONAL,
  724.     IN  LPWSTR   groupname
  725.     );
  726.  
  727. NET_API_STATUS NET_API_FUNCTION
  728. NetGroupDelUser (
  729.     IN  LPWSTR   servername OPTIONAL,
  730.     IN  LPWSTR   GroupName,
  731.     IN  LPWSTR   Username
  732.     );
  733.  
  734. NET_API_STATUS NET_API_FUNCTION
  735. NetGroupGetUsers (
  736.     IN  LPWSTR     servername OPTIONAL,
  737.     IN  LPWSTR     groupname,
  738.     IN  DWORD      level,
  739.     OUT LPBYTE     *bufptr,
  740.     IN  DWORD      prefmaxlen,
  741.     OUT LPDWORD    entriesread,
  742.     OUT LPDWORD    totalentries,
  743.     IN OUT LPDWORD ResumeHandle
  744.     );
  745.  
  746. NET_API_STATUS NET_API_FUNCTION
  747. NetGroupSetUsers (
  748.     IN  LPWSTR     servername OPTIONAL,
  749.     IN  LPWSTR     groupname,
  750.     IN  DWORD      level,
  751.     IN  LPBYTE     buf,
  752.     IN  DWORD      totalentries
  753.     );
  754.  
  755. //
  756. //  Data Structures - Group
  757. //
  758.  
  759. typedef struct _GROUP_INFO_0 {
  760.     LPWSTR   grpi0_name;
  761. }GROUP_INFO_0, *PGROUP_INFO_0, *LPGROUP_INFO_0;
  762.  
  763. typedef struct _GROUP_INFO_1 {
  764.     LPWSTR   grpi1_name;
  765.     LPWSTR   grpi1_comment;
  766. }GROUP_INFO_1, *PGROUP_INFO_1, *LPGROUP_INFO_1;
  767.  
  768. typedef struct _GROUP_INFO_2 {
  769.     LPWSTR   grpi2_name;
  770.     LPWSTR   grpi2_comment;
  771.     DWORD    grpi2_group_id;
  772.     DWORD    grpi2_attributes;
  773. }GROUP_INFO_2, *PGROUP_INFO_2;
  774.  
  775. typedef struct _GROUP_INFO_1002 {
  776.      LPWSTR  grpi1002_comment;
  777. } GROUP_INFO_1002, *PGROUP_INFO_1002, *LPGROUP_INFO_1002;
  778.  
  779. typedef struct _GROUP_INFO_1005 {
  780.      DWORD  grpi1005_attributes;
  781. } GROUP_INFO_1005, *PGROUP_INFO_1005, *LPGROUP_INFO_1005;
  782.  
  783.  
  784. typedef struct _GROUP_USERS_INFO_0 {
  785.      LPWSTR  grui0_name;
  786. } GROUP_USERS_INFO_0, *PGROUP_USERS_INFO_0, *LPGROUP_USERS_INFO_0;
  787.  
  788. typedef struct _GROUP_USERS_INFO_1 {
  789.      LPWSTR  grui1_name;
  790.      DWORD   grui1_attributes;
  791. } GROUP_USERS_INFO_1, *PGROUP_USERS_INFO_1, *LPGROUP_USERS_INFO_1;
  792.  
  793. //
  794. // Special Values and Constants - Group
  795. //
  796.  
  797. #define GROUPIDMASK                 0x8000      // MSB set if uid refers
  798.                                                 // to a group
  799.  
  800. //
  801. // Predefined group for all normal users, administrators and guests
  802. // LOCAL is a special group for local security.
  803. //
  804.  
  805. #define GROUP_SPECIALGRP_USERS      L"USERS"
  806. #define GROUP_SPECIALGRP_ADMINS     L"ADMINS"
  807. #define GROUP_SPECIALGRP_GUESTS     L"GUESTS"
  808. #define GROUP_SPECIALGRP_LOCAL      L"LOCAL"
  809.  
  810. //
  811. // parmnum manifests for SetInfo calls (only comment is settable)
  812. //
  813.  
  814. #define GROUP_ALL_PARMNUM           0
  815. #define GROUP_NAME_PARMNUM          1
  816. #define GROUP_COMMENT_PARMNUM       2
  817. #define GROUP_ATTRIBUTES_PARMNUM    3
  818.  
  819. //
  820. // the new infolevel counterparts of the old info level + parmnum
  821. //
  822.  
  823. #define GROUP_ALL_INFOLEVEL             \
  824.             (PARMNUM_BASE_INFOLEVEL + GROUP_ALL_PARMNUM)
  825. #define GROUP_NAME_INFOLEVEL            \
  826.             (PARMNUM_BASE_INFOLEVEL + GROUP_NAME_PARMNUM)
  827. #define GROUP_COMMENT_INFOLEVEL         \
  828.             (PARMNUM_BASE_INFOLEVEL + GROUP_COMMENT_PARMNUM)
  829. #define GROUP_ATTRIBUTES_INFOLEVEL      \
  830.             (PARMNUM_BASE_INFOLEVEL + GROUP_ATTRIBUTES_PARMNUM)
  831. #define GROUP_POSIX_ID_INFOLEVEL        \
  832.             (PARMNUM_BASE_INFOLEVEL + GROUP_POSIX_ID_PARMNUM)
  833.  
  834. #endif  // _LMGROUP_
  835.  
  836. //
  837. // LocalGroup Class
  838. //
  839.  
  840. #ifndef _LMLOCALGROUP_
  841. #define _LMLOCALGROUP_
  842.  
  843. //
  844. // Function Prototypes
  845. //
  846.  
  847. NET_API_STATUS NET_API_FUNCTION
  848. NetLocalGroupAdd (
  849.     IN  LPWSTR   servername OPTIONAL,
  850.     IN  DWORD    level,
  851.     IN  LPBYTE   buf,
  852.     OUT LPDWORD  parm_err OPTIONAL
  853.     );
  854.  
  855. NET_API_STATUS NET_API_FUNCTION
  856. NetLocalGroupAddMember (
  857.     IN  LPWSTR   servername OPTIONAL,
  858.     IN  LPWSTR   groupname,
  859.     IN  PSID     membersid
  860.     );
  861.  
  862. NET_API_STATUS NET_API_FUNCTION
  863. NetLocalGroupEnum (
  864.     IN  LPWSTR      servername OPTIONAL,
  865.     IN  DWORD       level,
  866.     OUT LPBYTE      *bufptr,
  867.     IN  DWORD       prefmaxlen,
  868.     OUT LPDWORD     entriesread,
  869.     OUT LPDWORD     totalentries,
  870.     IN OUT LPDWORD  resumehandle OPTIONAL
  871.     );
  872.  
  873. NET_API_STATUS NET_API_FUNCTION
  874. NetLocalGroupGetInfo (
  875.     IN  LPWSTR   servername OPTIONAL,
  876.     IN  LPWSTR   groupname,
  877.     IN  DWORD    level,
  878.     OUT LPBYTE   *bufptr
  879.     );
  880.  
  881. NET_API_STATUS NET_API_FUNCTION
  882. NetLocalGroupSetInfo (
  883.     IN  LPWSTR   servername OPTIONAL,
  884.     IN  LPWSTR   groupname,
  885.     IN  DWORD    level,
  886.     IN  LPBYTE   buf,
  887.     OUT LPDWORD  parm_err OPTIONAL
  888.     );
  889.  
  890. NET_API_STATUS NET_API_FUNCTION
  891. NetLocalGroupDel (
  892.     IN  LPWSTR   servername OPTIONAL,
  893.     IN  LPWSTR   groupname
  894.     );
  895.  
  896. NET_API_STATUS NET_API_FUNCTION
  897. NetLocalGroupDelMember (
  898.     IN  LPWSTR   servername OPTIONAL,
  899.     IN  LPWSTR   groupname,
  900.     IN  PSID     membersid
  901.     );
  902.  
  903. NET_API_STATUS NET_API_FUNCTION
  904. NetLocalGroupGetMembers (
  905.     IN  LPWSTR     servername OPTIONAL,
  906.     IN  LPWSTR     localgroupname,
  907.     IN  DWORD      level,
  908.     OUT LPBYTE     *bufptr,
  909.     IN  DWORD      prefmaxlen,
  910.     OUT LPDWORD    entriesread,
  911.     OUT LPDWORD    totalentries,
  912.     IN OUT LPDWORD resumehandle
  913.     );
  914.  
  915. NET_API_STATUS NET_API_FUNCTION
  916. NetLocalGroupSetMembers (
  917.     IN  LPWSTR     servername OPTIONAL,
  918.     IN  LPWSTR     groupname,
  919.     IN  DWORD      level,
  920.     IN  LPBYTE     buf,
  921.     IN  DWORD      totalentries
  922.     );
  923.  
  924. //
  925. //  Data Structures - LocalGroup
  926. //
  927.  
  928. typedef struct _LOCALGROUP_INFO_0 {
  929.     LPWSTR   lgrpi0_name;
  930. }LOCALGROUP_INFO_0, *PLOCALGROUP_INFO_0, *LPLOCALGROUP_INFO_0;
  931.  
  932. typedef struct _LOCALGROUP_INFO_1 {
  933.     LPWSTR   lgrpi1_name;
  934.     LPWSTR   lgrpi1_comment;
  935. }LOCALGROUP_INFO_1, *PLOCALGROUP_INFO_1, *LPLOCALGROUP_INFO_1;
  936.  
  937. typedef struct _LOCALGROUP_INFO_1002 {
  938.      LPWSTR  lgrpi1002_comment;
  939. }LOCALGROUP_INFO_1002, *PLOCALGROUP_INFO_1002, *LPLOCALGROUP_INFO_1002;
  940.  
  941. typedef struct _LOCALGROUP_MEMBERS_INFO_0 {
  942.      PSID    lgrmi0_sid;
  943. } LOCALGROUP_MEMBERS_INFO_0, *PLOCALGROUP_MEMBERS_INFO_0,
  944.   *LPLOCALGROUP_MEMBERS_INFO_0;
  945.  
  946. typedef struct _LOCALGROUP_MEMBERS_INFO_1 {
  947.      PSID         lgrmi1_sid;
  948.      SID_NAME_USE lgrmi1_sidusage;
  949.      LPWSTR       lgrmi1_name;
  950. } LOCALGROUP_MEMBERS_INFO_1, *PLOCALGROUP_MEMBERS_INFO_1,
  951.   *LPLOCALGROUP_MEMBERS_INFO_1;
  952.  
  953. typedef struct _LOCALGROUP_USERS_INFO_0 {
  954.      LPWSTR  lgrui0_name;
  955. } LOCALGROUP_USERS_INFO_0, *PLOCALGROUP_USERS_INFO_0,
  956.   *LPLOCALGROUP_USERS_INFO_0;
  957.  
  958.  
  959. #define LOCALGROUP_NAME_PARMNUM          1
  960. #define LOCALGROUP_COMMENT_PARMNUM       2
  961.  
  962. #endif  // _LMLOCALGROUP_
  963.  
  964. //
  965. // Access Class
  966. //
  967.  
  968. #ifndef _LMACCESS_
  969. #define _LMACCESS_
  970.  
  971.  
  972.  
  973. //
  974. // Function Prototypes - Access
  975. //
  976. //
  977. // The NetAccess APIs are only available to downlevel
  978. //
  979.  
  980. #define NetAccessAdd RxNetAccessAdd
  981.  
  982. NET_API_STATUS NET_API_FUNCTION
  983. NetAccessAdd (
  984.     IN  LPTSTR   servername OPTIONAL,
  985.     IN  DWORD    level,
  986.     IN  LPBYTE   buf,
  987.     OUT LPDWORD  parm_err OPTIONAL
  988.     );
  989.  
  990. #define NetAccessEnum RxNetAccessEnum
  991.  
  992. NET_API_STATUS NET_API_FUNCTION
  993. NetAccessEnum (
  994.     IN  LPTSTR     servername OPTIONAL,
  995.     IN  LPTSTR     BasePath,
  996.     IN  DWORD      Recursive,
  997.     IN  DWORD      level,
  998.     OUT LPBYTE     *bufptr,
  999.     IN  DWORD      prefmaxlen,
  1000.     OUT LPDWORD    entriesread,
  1001.     OUT LPDWORD    totalentries,
  1002.     IN OUT LPDWORD resume_handle OPTIONAL
  1003.     );
  1004.  
  1005. #define NetAccessGetInfo RxNetAccessGetInfo
  1006.  
  1007. NET_API_STATUS NET_API_FUNCTION
  1008. NetAccessGetInfo (
  1009.     IN  LPTSTR   servername OPTIONAL,
  1010.     IN  LPTSTR   resource,
  1011.     IN  DWORD    level,
  1012.     OUT LPBYTE   *bufptr
  1013.     );
  1014.  
  1015. #define NetAccessSetInfo RxNetAccessSetInfo
  1016.  
  1017. NET_API_STATUS NET_API_FUNCTION
  1018. NetAccessSetInfo (
  1019.     IN  LPTSTR   servername OPTIONAL,
  1020.     IN  LPTSTR   resource,
  1021.     IN  DWORD    level,
  1022.     IN  LPBYTE   buf,
  1023.     OUT LPDWORD  parm_err OPTIONAL
  1024.     );
  1025.  
  1026. #define NetAccessDel RxNetAccessDel
  1027.  
  1028. NET_API_STATUS NET_API_FUNCTION
  1029. NetAccessDel (
  1030.     IN  LPTSTR   servername OPTIONAL,
  1031.     IN  LPTSTR   resource
  1032.     );
  1033.  
  1034. #define NetAccessGetUserPerms RxNetAccessGetUserPerms
  1035.  
  1036. NET_API_STATUS NET_API_FUNCTION
  1037. NetAccessGetUserPerms (
  1038.     IN  LPTSTR   servername OPTIONAL,
  1039.     IN  LPTSTR   UGname,
  1040.     IN  LPTSTR   resource,
  1041.     OUT LPDWORD  Perms
  1042.     );
  1043.  
  1044. //
  1045. // Data Structures - Access
  1046. //
  1047.  
  1048. typedef struct _ACCESS_INFO_0 {
  1049.     LPTSTR   acc0_resource_name;
  1050. }ACCESS_INFO_0, *PACCESS_INFO_0, *LPACCESS_INFO_0;
  1051.  
  1052. typedef struct _ACCESS_INFO_1 {
  1053.     LPTSTR   acc1_resource_name;
  1054.     DWORD    acc1_attr;
  1055.     DWORD    acc1_count;
  1056. }ACCESS_INFO_1, *PACCESS_INFO_1, *LPACCESS_INFO_1;
  1057.  
  1058. typedef struct _ACCESS_INFO_1002 {
  1059.      DWORD   acc1002_attr;
  1060. } ACCESS_INFO_1002, *PACCESS_INFO_1002, *LPACCESS_INFO_1002;
  1061.  
  1062.  
  1063. typedef struct _ACCESS_LIST {
  1064.     LPTSTR   acl_ugname;
  1065.     DWORD    acl_access;
  1066. }ACCESS_LIST, *PACCESS_LIST, *LPACCESS_LIST;
  1067.  
  1068. //
  1069. // Special Values and Constants - Access
  1070. //
  1071.  
  1072. //
  1073. // Maximum number of permission entries for each resource.
  1074. //
  1075.  
  1076. #define MAXPERMENTRIES      64
  1077.  
  1078. //
  1079. //  Bit values for the access permissions.  ACCESS_ALL is a handy
  1080. //  way to specify maximum permissions.  These are used in
  1081. //  acl_access field of access_list structures.
  1082. //
  1083.  
  1084. #define ACCESS_NONE         0
  1085. #define ACCESS_ALL          ( ACCESS_READ | \
  1086.                                 ACCESS_WRITE | \
  1087.                                 ACCESS_CREATE | \
  1088.                                 ACCESS_EXEC | \
  1089.                                 ACCESS_DELETE | \
  1090.                                 ACCESS_ATRIB | \
  1091.                                 ACCESS_PERM \
  1092.                             )
  1093.  
  1094. #define ACCESS_READ         0x01
  1095. #define ACCESS_WRITE        0x02
  1096. #define ACCESS_CREATE       0x04
  1097. #define ACCESS_EXEC         0x08
  1098. #define ACCESS_DELETE       0x10
  1099. #define ACCESS_ATRIB        0x20
  1100. #define ACCESS_PERM         0x40
  1101.  
  1102. #define ACCESS_GROUP        0x8000
  1103.  
  1104. //
  1105. // Bit values for the acc1_attr field of the ACCESS_INFO_1 structure.
  1106. //
  1107.  
  1108. #define ACCESS_AUDIT        0x1
  1109.  
  1110. #define ACCESS_SUCCESS_OPEN         0x10
  1111. #define ACCESS_SUCCESS_WRITE        0x20
  1112. #define ACCESS_SUCCESS_DELETE       0x40
  1113. #define ACCESS_SUCCESS_ACL          0x80
  1114. #define ACCESS_SUCCESS_MASK         0xF0
  1115.  
  1116. #define ACCESS_FAIL_OPEN            0x100
  1117. #define ACCESS_FAIL_WRITE           0x200
  1118. #define ACCESS_FAIL_DELETE          0x400
  1119. #define ACCESS_FAIL_ACL             0x800
  1120. #define ACCESS_FAIL_MASK            0xF00
  1121.  
  1122. #define ACCESS_FAIL_SHIFT           4
  1123.  
  1124. //
  1125. // Parmnum value for NetAccessSetInfo.
  1126. //
  1127.  
  1128. #define ACCESS_RESOURCE_NAME_PARMNUM    1
  1129. #define ACCESS_ATTR_PARMNUM             2
  1130. #define ACCESS_COUNT_PARMNUM            3
  1131. #define ACCESS_ACCESS_LIST_PARMNUM      4
  1132.  
  1133. //
  1134. // the new infolevel counterparts of the old info level + parmnum
  1135. //
  1136.  
  1137. #define ACCESS_RESOURCE_NAME_INFOLEVEL  \
  1138.             (PARMNUM_BASE_INFOLEVEL + ACCESS_RESOURCE_NAME_PARMNUM)
  1139. #define ACCESS_ATTR_INFOLEVEL           \
  1140.             (PARMNUM_BASE_INFOLEVEL + ACCESS_ATTR_PARMNUM)
  1141. #define ACCESS_COUNT_INFOLEVEL          \
  1142.             (PARMNUM_BASE_INFOLEVEL + ACCESS_COUNT_PARMNUM)
  1143. #define ACCESS_ACCESS_LIST_INFOLEVEL    \
  1144.             (PARMNUM_BASE_INFOLEVEL + ACCESS_ACCESS_LIST_PARMNUM)
  1145.  
  1146. //
  1147. // ACCESS_LETTERS defines a letter for each bit position in
  1148. // the acl_access field of struct access_list.  Note that some
  1149. // bits have a corresponding letter of ' ' (space).
  1150. //
  1151.  
  1152. #define ACCESS_LETTERS      "RWCXDAP         "
  1153.  
  1154. #endif // _LMACCESS_
  1155.  
  1156. //
  1157. // Domain Class
  1158. //
  1159.  
  1160. #ifndef _LMDOMAIN_
  1161. #define _LMDOMAIN_
  1162.  
  1163. //
  1164. // Function Prototypes - Domain
  1165. //
  1166.  
  1167. NET_API_STATUS NET_API_FUNCTION
  1168. NetGetDCName (
  1169.     IN  LPWSTR   servername OPTIONAL,
  1170.     IN  LPWSTR   domainname OPTIONAL,
  1171.     OUT LPBYTE  *bufptr
  1172.     );
  1173.  
  1174. NET_API_STATUS NET_API_FUNCTION
  1175. NetGetAnyDCName (
  1176.     IN  LPWSTR   servername OPTIONAL,
  1177.     IN  LPWSTR   domainname OPTIONAL,
  1178.     OUT LPBYTE  *bufptr
  1179.     );
  1180.  
  1181.  
  1182. NET_API_STATUS NET_API_FUNCTION
  1183. I_NetLogonControl(
  1184.     IN LPWSTR ServerName OPTIONAL,
  1185.     IN DWORD FunctionCode,
  1186.     IN DWORD QueryLevel,
  1187.     OUT LPBYTE *Buffer
  1188.     );
  1189.  
  1190.  
  1191.  
  1192. //
  1193. // Special Values and Constants - Domain
  1194. //
  1195.  
  1196. //
  1197. // FunctionCode values for I_NetLogonControl.
  1198. //
  1199.  
  1200. #define NETLOGON_CONTROL_QUERY         1    // No-op: just query
  1201. #define NETLOGON_CONTROL_REPLICATE     2    // Force replicate on BDC
  1202. #define NETLOGON_CONTROL_SYNCHRONIZE   3    // Force synchronize on BDC
  1203. #define NETLOGON_CONTROL_PDC_REPLICATE 4    // Force PDC to broadcast change
  1204.  
  1205. // Debug function codes
  1206. #define NETLOGON_CONTROL_TRUNCATE_LOG  0xFFFD
  1207. #define NETLOGON_CONTROL_SET_DBFLAG    0xFFFE
  1208. #define NETLOGON_CONTROL_BREAKPOINT    0xFFFF
  1209.  
  1210. //
  1211. // Query level 1 for I_NetLogonControl
  1212. //
  1213.  
  1214. typedef struct _NETLOGON_INFO_1 {
  1215.         DWORD netlog1_flags;
  1216.         NET_API_STATUS netlog1_pdc_connection_status;
  1217. } NETLOGON_INFO_1, *PNETLOGON_INFO_1;
  1218.  
  1219. //
  1220. // Values of netlog1_flags
  1221. //
  1222.  
  1223. #define NETLOGON_REPLICATION_NEEDED       0x01  // Database is out of date
  1224. #define NETLOGON_REPLICATION_IN_PROGRESS  0x02  // Replication is happening now
  1225.  
  1226. #endif // _LMDOMAIN_
  1227.