Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

612 lines
9.6 KiB

  1. //
  2. // migmainp.h - private declarations for migmain library
  3. //
  4. #pragma once
  5. #ifdef DEBUG
  6. extern BOOL g_NoReloadsAllowed;
  7. #endif
  8. //
  9. // Externs
  10. //
  11. extern HKEY g_hKeyRoot95, g_hKeyRootNT;
  12. extern PCTSTR g_DomainUserName;
  13. extern PCTSTR g_Win9xUserName;
  14. extern PCTSTR g_FixedUserName;
  15. extern PVOID g_HiveTable;
  16. extern POOLHANDLE g_HivePool;
  17. extern TCHAR g_UserDatLocation[MAX_TCHAR_PATH];
  18. extern PVOID g_NulSessionTable;
  19. extern BOOL g_WorkgroupFlag;
  20. extern BOOL g_DomainProblem;
  21. extern INT g_RetryCount;
  22. extern PCTSTR g_EveryoneStr;
  23. extern PCTSTR g_AdministratorsGroupStr;
  24. extern PCTSTR g_PowerUsersGroupStr;
  25. extern PCTSTR g_DomainUsersGroupStr;
  26. extern PCTSTR g_NoneGroupStr;
  27. extern TCHAR g_DefaultUserName[MAX_USER_NAME];
  28. extern BOOL g_PersonalSKU;
  29. extern GROWLIST g_StartMenuItemsForCleanUpCommon;
  30. extern GROWLIST g_StartMenuItemsForCleanUpPrivate;
  31. extern BOOL g_BlowAwayTempShellFolders;
  32. //
  33. // Defines
  34. //
  35. #define INDEX_MAX 3
  36. #define INDEX_ADMINISTRATOR 2
  37. #define INDEX_LOGON_PROMPT 1
  38. #define INDEX_DEFAULT_USER 0
  39. #define MAX_SID_SIZE 1024
  40. #define DOMAIN_RETRY_ABORT -2
  41. #define DOMAIN_RETRY_NO -1
  42. #define DOMAIN_RETRY_RESET 0
  43. #define DOMAIN_RETRY_MAX 3
  44. //
  45. // Bit test macros
  46. //
  47. #define BITSARESET(bits,mask) (((bits) & (mask)) == (mask))
  48. #define BITSARECLEAR(bits,mask) (((bits) & (mask)) == 0)
  49. //
  50. // Typedefs
  51. //
  52. typedef struct {
  53. PCWSTR User;
  54. PCWSTR Password;
  55. PCWSTR EncryptedPassword;
  56. DWORD PasswordAttribs;
  57. PCWSTR AdminComment;
  58. PCWSTR FullName;
  59. } ACCOUNTPROPERTIES, *PACCOUNTPROPERTIES;
  60. typedef struct {
  61. PCWSTR DomainName;
  62. PCWSTR Server;
  63. INT DomainNumber; // for enumeration
  64. } TRUST_ENUM, *PTRUST_ENUM;
  65. typedef struct _tagACCT_POSSIBLE_DOMAINS {
  66. struct _tagACCT_DOMAINS *DomainPtr;
  67. struct _tagACCT_POSSIBLE_DOMAINS *Next;
  68. } ACCT_POSSIBLE_DOMAINS, *PACCT_POSSIBLE_DOMAINS;
  69. typedef struct _tagACCT_USERS {
  70. PCWSTR User;
  71. INT PossibleDomains;
  72. struct _tagACCT_USERS *Next, *Prev;
  73. struct _tagACCT_DOMAINS *DomainPtr;
  74. // for users with unknown domains
  75. struct _tagACCT_POSSIBLE_DOMAINS *FirstPossibleDomain;
  76. } ACCT_USERS, *PACCT_USERS;
  77. typedef struct _tagACCT_DOMAINS {
  78. PCWSTR Domain;
  79. PCWSTR Server; // NULL if nul session not established
  80. INT UserCount;
  81. struct _tagACCT_DOMAINS *Next;
  82. struct _tagACCT_USERS *FirstUserPtr;
  83. } ACCT_DOMAINS, *PACCT_DOMAINS;
  84. typedef struct {
  85. PACCT_DOMAINS DomainPtr;
  86. PACCT_USERS UserPtr;
  87. PACCT_POSSIBLE_DOMAINS PossibleDomainPtr;
  88. } ACCT_ENUM, *PACCT_ENUM;
  89. typedef struct {
  90. DWORD Attribs;
  91. BOOL Enabled;
  92. BOOL Failed;
  93. PSID Sid; // used only in CreateAclFromMemberList
  94. TCHAR UserOrGroup[];
  95. } ACLMEMBER, *PACLMEMBER;
  96. //
  97. // Prototypes
  98. //
  99. PCTSTR
  100. GetMemDbDat (
  101. VOID
  102. );
  103. VOID
  104. RunExternalProcesses (
  105. IN HINF Inf,
  106. IN PMIGRATE_USER_ENUM EnumPtr
  107. );
  108. VOID
  109. UninstallUserProfileCleanupPreparation (
  110. IN HINF Inf,
  111. IN PMIGRATE_USER_ENUM EnumPtr,
  112. IN BOOL bPlayback
  113. );
  114. DWORD
  115. ProcessUser (
  116. IN DWORD Request,
  117. IN PMIGRATE_USER_ENUM EnumPtr
  118. );
  119. DWORD
  120. ProcessLocalMachine_First (
  121. DWORD Request
  122. );
  123. DWORD
  124. ProcessLocalMachine_Last (
  125. DWORD Request
  126. );
  127. DWORD
  128. ProcessMigrationDLLs (
  129. DWORD Request
  130. );
  131. PCTSTR GetString (WORD wMsg);
  132. VOID
  133. PrepareMigrationProgressBar (
  134. VOID
  135. );
  136. BOOL
  137. CallAllMigrationFunctions (
  138. VOID
  139. );
  140. VOID
  141. FindAccountInit (
  142. VOID
  143. );
  144. VOID
  145. FindAccountTerminate (
  146. VOID
  147. );
  148. BOOL
  149. SearchDomainsForUserAccounts (
  150. VOID
  151. );
  152. BOOL
  153. RetryMessageBox (
  154. DWORD Id,
  155. PCTSTR *ArgArray
  156. );
  157. PCWSTR
  158. GetDomainForUser (
  159. IN PCWSTR User
  160. );
  161. PSID
  162. GetSidForUser (
  163. PCWSTR User
  164. );
  165. PCTSTR
  166. GetUserProfilePath (
  167. IN PCTSTR AccountName,
  168. OUT PTSTR *BufferPtr
  169. );
  170. PCTSTR
  171. GetUserDatLocation (
  172. IN PCTSTR User,
  173. OUT PBOOL CreateOnlyFlag OPTIONAL
  174. );
  175. //
  176. // acctlist.c functions
  177. //
  178. VOID
  179. InitAccountList (
  180. VOID
  181. );
  182. VOID
  183. TerminateAccountList (
  184. VOID
  185. );
  186. PCWSTR
  187. ListFirstDomain (
  188. OUT PACCT_ENUM DomainEnumPtr
  189. );
  190. PCWSTR
  191. ListNextDomain (
  192. IN OUT PACCT_ENUM DomainEnumPtr
  193. );
  194. BOOL
  195. IsTrustedDomain (
  196. IN PACCT_ENUM DomainEnumPtr
  197. );
  198. BOOL
  199. FindDomainInList (
  200. OUT PACCT_ENUM DomainEnumPtr,
  201. IN PCWSTR DomainToFind
  202. );
  203. PCWSTR
  204. ListFirstUserInDomain (
  205. IN PACCT_ENUM DomainEnumPtr,
  206. OUT PACCT_ENUM UserEnumPtr
  207. );
  208. PCWSTR
  209. ListNextUserInDomain (
  210. IN OUT PACCT_ENUM UserEnumPtr
  211. );
  212. BOOL
  213. FindUserInDomain (
  214. IN PACCT_ENUM DomainEnumPtr,
  215. OUT PACCT_ENUM UserEnumPtr,
  216. IN PCWSTR UserToFind
  217. );
  218. INT
  219. CountUsersInDomain (
  220. IN PACCT_ENUM DomainEnumPtr
  221. );
  222. VOID
  223. AddDomainToList (
  224. IN PCWSTR Domain
  225. );
  226. BOOL
  227. AddUserToDomainList (
  228. IN PCWSTR User,
  229. IN PCWSTR Domain
  230. );
  231. VOID
  232. DeleteUserFromDomainList (
  233. IN PACCT_ENUM UserEnumPtr
  234. );
  235. BOOL
  236. MoveUserToNewDomain (
  237. IN OUT PACCT_ENUM UserEnumPtr,
  238. IN PCWSTR NewDomain
  239. );
  240. VOID
  241. UserMayBeInDomain (
  242. IN PACCT_ENUM UserEnumPtr,
  243. IN PACCT_ENUM DomainEnumPtr
  244. );
  245. VOID
  246. ClearPossibleDomains (
  247. IN PACCT_ENUM UserEnumPtr
  248. );
  249. VOID
  250. PrepareForRetry (
  251. VOID
  252. );
  253. PCWSTR
  254. ListFirstPossibleDomain (
  255. IN PACCT_ENUM UserEnumPtr,
  256. OUT PACCT_ENUM PossibleDomainEnumPtr
  257. );
  258. PCWSTR
  259. ListNextPossibleDomain (
  260. IN OUT PACCT_ENUM PossibleDomainEnumPtr
  261. );
  262. INT
  263. CountPossibleDomains (
  264. IN OUT PACCT_ENUM UserEnumPtr
  265. );
  266. BOOL
  267. BuildDomainList (
  268. VOID
  269. );
  270. BOOL
  271. QueryDomainForUser (
  272. IN PACCT_ENUM DomainEnumPtr,
  273. IN PACCT_ENUM UserEnumPtr
  274. );
  275. BOOL
  276. GetUserSid (
  277. IN PCWSTR User,
  278. IN PCWSTR Domain,
  279. IN OUT PGROWBUFFER SidBufPtr
  280. );
  281. BOOL
  282. GetUserType (
  283. IN PCWSTR User,
  284. IN PCWSTR Domain,
  285. OUT SID_NAME_USE *UseType
  286. );
  287. PCWSTR
  288. GetProfilePathForUser (
  289. IN PCWSTR User
  290. );
  291. VOID
  292. AutoStartProcessing (
  293. VOID
  294. );
  295. //
  296. // security.c functions
  297. //
  298. DWORD
  299. AddAclMember (
  300. IN OUT PGROWBUFFER GrowBuf,
  301. IN PCTSTR UserOrGroup,
  302. IN DWORD Attributes
  303. );
  304. VOID
  305. GetNextAclMember (
  306. IN OUT PACLMEMBER *AclMemberPtrToPtr
  307. );
  308. PACL
  309. CreateAclFromMemberList (
  310. IN OUT PBYTE AclMemberList,
  311. IN DWORD MemberCount
  312. );
  313. VOID
  314. FreeMemberListAcl (
  315. PACL Acl
  316. );
  317. LONG
  318. CreateLocalAccount (
  319. IN PACCOUNTPROPERTIES Properties,
  320. IN PCWSTR User OPTIONAL
  321. );
  322. BOOL
  323. AddSidToLocalGroup (
  324. IN PSID Sid,
  325. IN PCWSTR Group
  326. );
  327. BOOL
  328. IsMemberOfDomain (
  329. VOID
  330. );
  331. LONG
  332. GetAnyDC (
  333. IN PCWSTR Domain,
  334. IN PWSTR ServerBuf,
  335. IN BOOL GetNewServer
  336. );
  337. VOID
  338. ClearAdminPassword (
  339. VOID
  340. );
  341. #define SF_EVERYONE_NONE 0x00000001
  342. #define SF_EVERYONE_READ 0x00000002
  343. #define SF_EVERYONE_WRITE 0x00000004
  344. #define SF_EVERYONE_FULL 0x0000000e
  345. #define SF_EVERYONE_MASK 0x0000000f
  346. #define SF_ADMINISTRATORS_NONE 0x00000010
  347. #define SF_ADMINISTRATORS_READ 0x00000020
  348. #define SF_ADMINISTRATORS_WRITE 0x00000040
  349. #define SF_ADMINISTRATORS_FULL 0x000000e0
  350. #define SF_ADMINISTRATORS_MASK 0x000000f0
  351. DWORD
  352. SetRegKeySecurity (
  353. IN PCTSTR KeyStr,
  354. IN DWORD DaclFlags, OPTIONAL // see SF_* constants above
  355. IN PSID Owner, OPTIONAL
  356. IN PSID PrimaryGroup, OPTIONAL
  357. IN BOOL Recursive
  358. );
  359. //
  360. // FileMig stuff
  361. //
  362. BOOL
  363. DoFileDel (
  364. VOID
  365. );
  366. BOOL
  367. DoLinkEdit (
  368. VOID
  369. );
  370. DWORD
  371. DoCopyFile (
  372. DWORD Request
  373. );
  374. DWORD
  375. DoMoveFile (
  376. DWORD Request
  377. );
  378. BOOL
  379. RemoveEmptyDirs (
  380. VOID
  381. );
  382. BOOL
  383. ProcessStfFiles (
  384. VOID
  385. );
  386. BOOL
  387. UpdateBriefcaseDatabasePaths (
  388. VOID
  389. );
  390. //
  391. // iniact.c
  392. //
  393. typedef enum {
  394. INIACT_WKS_FIRST,
  395. INIACT_WKS_LAST
  396. } INIACT_CONTEXT;
  397. BOOL
  398. DoIniActions (
  399. IN INIACT_CONTEXT Context
  400. );
  401. //
  402. // inifiles.c
  403. //
  404. BOOL
  405. ProcessIniFileMapping (
  406. IN BOOL UserMode
  407. );
  408. BOOL
  409. MoveIniSettings (
  410. VOID
  411. );
  412. BOOL
  413. MergeIniFile (
  414. IN PCTSTR FileNtLocation,
  415. IN PCTSTR FileTempLocation,
  416. IN BOOL TempHasPriority
  417. );
  418. BOOL
  419. ConvertIniFile (
  420. IN PCTSTR IniFilePath
  421. );
  422. BOOL
  423. ConvertIniFiles (
  424. VOID
  425. );
  426. BOOL
  427. MergeIniSettings (
  428. VOID
  429. );
  430. BOOL
  431. RestoreMMSettings_System (
  432. VOID
  433. );
  434. BOOL
  435. RestoreMMSettings_User (
  436. IN PCTSTR UserName,
  437. IN HKEY UserRoot
  438. );
  439. //
  440. // shllink.c
  441. //
  442. BOOL
  443. ModifyShellLink(
  444. IN PCWSTR FileName,
  445. IN PCWSTR NewTarget,
  446. IN PCWSTR NewArgs,
  447. IN PCWSTR NewWorkDir,
  448. IN PCWSTR NewIconPath,
  449. IN INT NewIconNumber,
  450. IN BOOL ConvertToLnk,
  451. IN PLNK_EXTRA_DATA ExtraData, OPTIONAL
  452. IN BOOL ForceToShowNormal
  453. );
  454. BOOL
  455. RestoreInfoFromDefaultPif (
  456. IN PCTSTR UserName,
  457. IN HKEY KeyRoot
  458. );
  459. BOOL
  460. OurMoveFileExW (
  461. IN PCWSTR ExistingFile,
  462. IN PCWSTR DestinationFile,
  463. IN DWORD Flags
  464. );
  465. #define OurMoveFileW(exist,dest) OurMoveFileExW(exist,dest,0)
  466. BOOL
  467. OurMoveFileExA (
  468. IN PCSTR ExistingFile,
  469. IN PCSTR DestinationFile,
  470. IN DWORD Flags
  471. );
  472. #define OurMoveFileA(exist,dest) OurMoveFileExA(exist,dest,0)
  473. BOOL
  474. OurCopyFileW (
  475. IN PCWSTR ExistingFile,
  476. IN PCWSTR DestinationFile
  477. );
  478. VOID
  479. SetClassicLogonType (
  480. VOID
  481. );
  482. #ifdef UNICODE
  483. #define OurMoveFileEx OurMoveFileExW
  484. #define OurMoveFile OurMoveFileW
  485. #else
  486. #define OurMoveFileEx OurMoveFileExA
  487. #define OurMoveFile OurMoveFileA
  488. #endif