Leaked source code of windows server 2003
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.

988 lines
20 KiB

  1. /*++
  2. Copyright (c) 1997-1999 Microsoft Corporation
  3. Module Name:
  4. efssrv.hxx
  5. Abstract:
  6. EFS (Encrypting File System) defines, data and function prototypes.
  7. Author:
  8. Robert Reichel (RobertRe)
  9. Robert Gu (RobertG)
  10. Environment:
  11. Revision History:
  12. --*/
  13. #ifndef _EFSSRV_
  14. #define _EFSSRV_
  15. #include <efsstruc.h>
  16. #include <wincrypt.h>
  17. #include <winefs.h>
  18. #include <des.h>
  19. #include <des3.h>
  20. #include <aes.h>
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. #define FILE_SIGNATURE L"ROBS"
  25. #define STREAM_SIGNATURE L"NTFS"
  26. #define DATA_SIGNATURE L"GURE"
  27. #define DEFAULT_STREAM L"::$DATA"
  28. #define DEF_STR_LEN 14
  29. #define MAX_PATH_LENGTH 1024
  30. #define EFSDIR L"\\System Volume Information"
  31. #define EFSLOGPATTERN L"\\EFS*.LOG"
  32. #define EFSSOURCE L"EFS"
  33. #define LOGEXT L"LOG"
  34. #define LOGSIG L"GUJR"
  35. #define LOGSIGLEN 4
  36. #define LOGVERID 100
  37. #define EFSDIRLEN (sizeof(EFSDIR) - sizeof (WCHAR))
  38. #define TRUSTEDPEOPLE L"TrustedPeople"
  39. #define OTHERPEOPLE L"AddressBook"
  40. #define DAVHEADER 0x01
  41. #define WEBDAVPATH 0x0001
  42. #define OPEN_FOR_ENC 0x00000001
  43. #define OPEN_FOR_DEC 0x00000002
  44. #define OPEN_FOR_REC 0x00000004
  45. #define OPEN_FOR_EXP 0x00000008
  46. #define OPEN_FOR_IMP 0x00000010
  47. #define OPEN_FOR_FTR 0x00000020
  48. #define CERT_NOT_VALIDATED 0
  49. #define CERT_VALIDATION_FAILED 1
  50. #define CERT_VALIDATED 2
  51. #define RECOVERY_POLICY_EMPTY 0x01
  52. #define RECOVERY_POLICY_NULL 0x02
  53. #define RECOVERY_POLICY_NO_AGENT 0x04
  54. #define RECOVERY_POLICY_OK 0x20
  55. #define RECOVERY_POLICY_EXPIRED_CERTS 0x100
  56. #define RECOVERY_POLICY_NOT_EFFECT_CERTS 0x200
  57. #define RECOVERY_POLICY_BAD_POLICY 0x400
  58. #define RECOVERY_POLICY_UNKNOWN_BAD 0x800
  59. #define RECOVERY_POLICY_NO_MEMORY 0x1000
  60. #define RECOVERY_POLICY_STATUS_CHANGE 0x80000000
  61. #define USER_INTERACTIVE 2
  62. #define USER_REMOTE 1
  63. #define USER_UNKNOWN 0
  64. #define CERTINLMTRUSTEDSTORE 2
  65. #define CERTINLMOTHERSTORE 4
  66. #define CERTSTOREIDMASK 6
  67. #define CORRUPT_DATA_1 1
  68. #define CORRUPT_DATA_2 2
  69. #define CORRUPT_DATA_3 3
  70. #define CORRUPT_DATA_4 4
  71. #define CORRUPT_DATA_5 5
  72. #define CORRUPT_DATA_6 6
  73. #define CORRUPT_DATA_7 7
  74. #define CORRUPT_DATA_8 8
  75. extern DESTable DesTable;
  76. extern UCHAR DriverSessionKey[];
  77. extern HCRYPTPROV hProvVerify;
  78. extern WCHAR EfsComputerName[];
  79. extern LIST_ENTRY UserCacheList;
  80. extern RTL_CRITICAL_SECTION GuardCacheListLock;
  81. extern LONG UserCacheListLimit;
  82. extern LONG UserCacheListCount;
  83. extern LONGLONG CACHE_CERT_VALID_TIME;
  84. //
  85. // Useful flags for passing around what we're doing.
  86. //
  87. typedef enum _EFSP_OPERATION {
  88. Encrypting,
  89. Decrypting,
  90. EncryptRecovering,
  91. DecryptRecovering
  92. } EFSP_OPERATION;
  93. typedef enum _EFS_ACTION_STATUS {
  94. BeginEncryptDir,
  95. BeginDecryptDir,
  96. BeginEncryptFile,
  97. BeginDecryptFile,
  98. EncryptTmpFileWritten,
  99. DecryptTmpFileWritten,
  100. EncryptionDone,
  101. DecryptionDone,
  102. EncryptionBackout,
  103. EncryptionMessup,
  104. EncryptionSrcDone,
  105. } EFS_ACTION_STATUS;
  106. //
  107. // Common log file header
  108. //
  109. #define LOG_DECRYPTION 0x00000001
  110. #define LOG_DIRECTORY 0x00000002
  111. typedef struct _LOGHEADER {
  112. WCHAR SIGNATURE[4];
  113. ULONG VerID;
  114. ULONG SectorSize;
  115. ULONG HeaderSize; //Size in bytes. Including the padding zero of TempFilePath
  116. ULONG HeaderBlockSize; //Size in bytes including the checksum. Multiple of SectorSize
  117. ULONG Flag; //Encryption or Decryption, File or Directory
  118. ULONG TargetFilePathOffset; //Offset to Target file name in user readable format
  119. ULONG TargetFilePathLength; //The length of the above name including ending 0
  120. ULONG TempFilePathOffset; //Offset to Temp file name in user readable format
  121. ULONG TempFilePathLength; //The length of the above name including ending 0
  122. ULONG OffsetStatus1; //Point to the first copy of the status info
  123. ULONG OffsetStatus2; //Point to the second copy of the status info
  124. ULONG Reserved[3];
  125. ULONG LengthOfTargetFileInternalName; //Size in bytes ( 8 for V 1.0)
  126. LARGE_INTEGER TargetFileInternalName; //Use File ID for V 1.0
  127. ULONG LengthOfTempFileInternalName; //Size in bytes ( 8 for V 1.0)
  128. LARGE_INTEGER TempFileInternalName; //Use File ID for V 1.0
  129. } LOGHEADER, *PLOGHEADER;
  130. //
  131. // Local structure containing recovery information.
  132. // More easily digestable than the stuff we get out
  133. // of the policy.
  134. //
  135. typedef struct _CURRENT_RECOVERY_POLICY {
  136. PBYTE Base;
  137. LARGE_INTEGER TimeStamp;
  138. LONG CertValidated;
  139. DWORD dwKeyCount;
  140. DWORD PolicyStatus;
  141. PBYTE * pbHash;
  142. DWORD * cbHash;
  143. PBYTE * pbPublicKeys;
  144. DWORD * cbPublicKeys;
  145. LPWSTR * lpDisplayInfo;
  146. PCCERT_CONTEXT * pCertContext;
  147. PSID * pSid;
  148. } CURRENT_RECOVERY_POLICY, *PCURRENT_RECOVERY_POLICY;
  149. //
  150. // User Cache Node
  151. //
  152. typedef struct _USER_CACHE {
  153. LUID AuthId;
  154. PSID UserId;
  155. LONG UseRefCount;
  156. LONG StopUseCount; //For the purpose of free the cache
  157. PBYTE pbHash;
  158. DWORD cbHash;
  159. LONG CertValidated;
  160. LPWSTR ContainerName;
  161. LPWSTR DisplayInformation;
  162. LPWSTR ProviderName;
  163. HCRYPTPROV hProv;
  164. HCRYPTKEY hUserKey;
  165. FILETIME CertExpTime;
  166. LARGE_INTEGER TimeStamp;
  167. LIST_ENTRY CacheChain;
  168. } USER_CACHE, *PUSER_CACHE;
  169. typedef struct _EFS_USER_INFO {
  170. LPWSTR lpUserName;
  171. LPWSTR lpDomainName;
  172. LPWSTR lpProfilePath; // may be NULL
  173. LPWSTR lpUserSid;
  174. LPWSTR lpKeyPath;
  175. PTOKEN_USER pTokenUser;
  176. PUSER_CACHE pUserCache;
  177. HANDLE hThreadToken;
  178. HANDLE hProfile;
  179. LUID AuthId;
  180. LONG InterActiveUser;
  181. BOOLEAN bDomainAccount;
  182. BOOLEAN bIsSystem;
  183. BOOLEAN UserCacheStop;
  184. BOOLEAN NonKerberos;
  185. } EFS_USER_INFO, *PEFS_USER_INFO;
  186. typedef struct _EFS_POL_CALLBACK {
  187. HANDLE *EfsPolicyEventHandle;
  188. BOOLEAN *EfsDisable;
  189. } EFS_POL_CALLBACK, *PEFS_POL_CALLBACK;
  190. BOOLEAN
  191. EfspIsSystem(
  192. PEFS_USER_INFO pEfsUserInfo,
  193. OUT PBOOLEAN System
  194. );
  195. BOOLEAN
  196. EfspGetUserInfo(
  197. IN OUT PEFS_USER_INFO pEfsUserInfo
  198. );
  199. VOID
  200. EfspFreeUserInfo(
  201. IN PEFS_USER_INFO pEfsUserInfo
  202. );
  203. BOOLEAN
  204. EfspInitUserCacheNode(
  205. IN OUT PUSER_CACHE pCacheNode,
  206. IN PSID pUserID,
  207. IN PBYTE pbHash,
  208. IN DWORD cbHash,
  209. IN LPWSTR ContainerName,
  210. IN LPWSTR ProviderName,
  211. IN LPWSTR DisplayInformation,
  212. IN LPFILETIME CertExpTime,
  213. IN HCRYPTKEY hKey,
  214. IN HCRYPTPROV hProv,
  215. IN LUID *AuthId,
  216. IN LONG CertValidated
  217. );
  218. BOOLEAN
  219. EfspAddUserCache(
  220. IN PUSER_CACHE pUserCache
  221. );
  222. VOID
  223. EfspReleaseUserCache(
  224. IN PUSER_CACHE pUserCache
  225. );
  226. DWORD
  227. GenerateDRF(
  228. IN PEFS_KEY Fek,
  229. OUT PENCRYPTED_KEYS *pNewDRF,
  230. OUT DWORD *cbDRF
  231. );
  232. BOOLEAN
  233. GenerateFEK(
  234. IN OUT PEFS_KEY *Key
  235. );
  236. BOOLEAN
  237. ConstructEFS(
  238. PEFS_USER_INFO pEfsUserInfo,
  239. PEFS_KEY Fek,
  240. PEFS_DATA_STREAM_HEADER ParentEfsStreamHeader,
  241. PEFS_DATA_STREAM_HEADER * EfsStreamHeader
  242. );
  243. BOOLEAN
  244. ConstructDirectoryEFS(
  245. PEFS_USER_INFO pEfsUserInfo,
  246. PEFS_KEY Fek,
  247. PEFS_DATA_STREAM_HEADER * ChildEfs
  248. );
  249. DWORD
  250. DecryptFek(
  251. PEFS_USER_INFO pEfsUserInfo,
  252. PEFS_DATA_STREAM_HEADER EfsStream,
  253. PEFS_KEY * Fek,
  254. PEFS_DATA_STREAM_HEADER * NewEfs,
  255. ULONG OpenType
  256. );
  257. DWORD
  258. EfsGetFek(
  259. IN PEFS_USER_INFO pEfsUserInfo,
  260. IN PEFS_DATA_STREAM_HEADER EfsStream,
  261. OUT PEFS_KEY * Fek
  262. );
  263. NTSTATUS
  264. InitDriverSessionKey(
  265. VOID
  266. );
  267. NTSTATUS
  268. GenerateDriverSessionKey(
  269. PEFS_INIT_DATAEXG InitDataExg
  270. );
  271. NTSTATUS
  272. EfsServerInit(
  273. VOID
  274. );
  275. DWORD WINAPI
  276. EFSRecover(
  277. IN LPVOID Param
  278. );
  279. VOID
  280. DumpBytes(
  281. PBYTE Blob,
  282. ULONG Length
  283. );
  284. VOID
  285. DumpEFS(
  286. PEFS_DATA_STREAM_HEADER Efs
  287. );
  288. NTSTATUS
  289. EfspGetTokenUser(
  290. IN OUT PEFS_USER_INFO pEfsUserInfo
  291. );
  292. NTSTATUS
  293. EfspGetUserName(
  294. IN OUT PEFS_USER_INFO pEfsUserInfo
  295. );
  296. PWCHAR
  297. ConvertSidToWideCharString(
  298. PSID Sid
  299. );
  300. BOOL
  301. EfsErrorToNtStatus(
  302. IN DWORD WinError,
  303. OUT PNTSTATUS NtStatus
  304. );
  305. DWORD
  306. EfspInstallCertAsUserKey(
  307. PEFS_USER_INFO pEfsUserInfo,
  308. PENCRYPTION_CERTIFICATE pEncryptionCertificate
  309. );
  310. DWORD
  311. EfspReplaceUserKeyInformation(
  312. PEFS_USER_INFO pEfsUserInfo
  313. );
  314. VOID
  315. MarkFileForDelete(
  316. HANDLE FileHandle
  317. );
  318. DWORD
  319. GetVolumeRoot(
  320. IN PUNICODE_STRING SrcFileName,
  321. OUT PUNICODE_STRING RootPath
  322. );
  323. NTSTATUS
  324. GetLogFile(
  325. IN PUNICODE_STRING RootPath,
  326. OUT HANDLE *LogFile
  327. );
  328. NTSTATUS
  329. MakeSystemFullControlSD(
  330. OUT PSECURITY_DESCRIPTOR *ppSD
  331. );
  332. NTSTATUS
  333. CreateLogFile(
  334. IN PUNICODE_STRING FileName,
  335. IN PSECURITY_DESCRIPTOR SD,
  336. OUT HANDLE *LogFile
  337. );
  338. NTSTATUS
  339. CreateLogHeader(
  340. IN HANDLE LogFile,
  341. IN ULONG SectorSize,
  342. IN PLARGE_INTEGER TragetID,
  343. IN PLARGE_INTEGER TempID OPTIONAL,
  344. IN LPCWSTR SrcFileName,
  345. IN LPCWSTR TempFileName OPTIONAL,
  346. IN EFSP_OPERATION Operation,
  347. IN EFS_ACTION_STATUS Action,
  348. OUT ULONG *LogInfoOffset
  349. );
  350. ULONG
  351. GetCheckSum(
  352. IN BYTE *WorkBuffer,
  353. IN ULONG Length
  354. );
  355. VOID
  356. CreateBlockSum(
  357. IN BYTE *WorkBuffer,
  358. IN ULONG Length,
  359. IN ULONG SectorSize
  360. );
  361. NTSTATUS
  362. CreateBackupFile(
  363. IN PUNICODE_STRING SourceFileNameU,
  364. OUT HANDLE *hBackupFile,
  365. OUT FILE_INTERNAL_INFORMATION *BackupID,
  366. OUT LPWSTR *BackupFileName
  367. );
  368. NTSTATUS
  369. WriteLogFile(
  370. IN HANDLE LogFileH,
  371. IN ULONG SectorSize,
  372. IN ULONG StartOffset,
  373. IN EFS_ACTION_STATUS Action
  374. );
  375. void
  376. TryRecoverVol(
  377. IN const WCHAR *VolumeName,
  378. IN WCHAR *CacheDir
  379. );
  380. void
  381. TryRecoverFile(
  382. IN const WCHAR *VolumeName,
  383. IN LPWIN32_FIND_DATA FindFileInfo,
  384. IN HANDLE EventHandleLog
  385. );
  386. NTSTATUS
  387. ReadLogFile(
  388. IN HANDLE LogFile,
  389. OUT BYTE* ReadBuffer,
  390. IN ULONG FirstCopy,
  391. IN ULONG SecondCopy
  392. );
  393. NTSTATUS
  394. DoRecover(
  395. IN HANDLE Target,
  396. IN HANDLE TmpFile OPTIONAL,
  397. IN HANDLE LogFile,
  398. IN LPCWSTR TargetName,
  399. IN LPCWSTR TmpName OPTIONAL,
  400. IN ULONG StatusCopySize,
  401. IN ULONG StatusStartOffset,
  402. IN ULONG Action,
  403. IN HANDLE EventHandleLog
  404. );
  405. ULONG
  406. GetCheckSum(
  407. IN BYTE *WorkBuffer,
  408. IN ULONG Length
  409. );
  410. NTSTATUS
  411. DecryptDir(
  412. IN HANDLE Target,
  413. IN LPCWSTR TargetName
  414. );
  415. NTSTATUS
  416. SendGenFsctl(
  417. IN HANDLE Target,
  418. IN ULONG Psc,
  419. IN ULONG Csc,
  420. IN ULONG EfsCode,
  421. IN ULONG FsCode
  422. );
  423. NTSTATUS
  424. RestoreTarget(
  425. IN HANDLE Target,
  426. IN HANDLE TmpFile,
  427. IN LPCWSTR TargetName,
  428. IN LPCWSTR TmpName,
  429. IN HANDLE EventHandleLog,
  430. EFSP_OPERATION Operation
  431. );
  432. DWORD
  433. EFSSendPipeData(
  434. char *DataBuf,
  435. ULONG DataLength,
  436. PVOID Context
  437. );
  438. DWORD
  439. EFSReceivePipeData(
  440. char *DataBuf,
  441. ULONG* DataLength,
  442. PVOID Context
  443. );
  444. DWORD
  445. GetOverWriteEfsAttrFsctlInput(
  446. ULONG Flag,
  447. ULONG AccessFlag,
  448. char *InputData,
  449. ULONG InputDataLength,
  450. char *OutputData,
  451. ULONG *OutputDataLength
  452. );
  453. PBYTE
  454. GetCertHashFromCertContext(
  455. IN PCCERT_CONTEXT pCertContext,
  456. OUT PDWORD pcbHash
  457. );
  458. PCRYPT_KEY_PROV_INFO
  459. GetKeyProvInfo(
  460. PCCERT_CONTEXT pCertContext
  461. );
  462. PCERT_PUBLIC_KEY_INFO
  463. ExportPublicKeyInfo(
  464. IN HCRYPTPROV hProv,
  465. IN DWORD dwKeySpec,
  466. IN DWORD dwCertEncodingType,
  467. IN OUT DWORD *pcbInfo
  468. );
  469. BOOLEAN
  470. AddUserToEFS(
  471. IN PEFS_DATA_STREAM_HEADER EfsStream,
  472. IN PSID NewUserSid OPTIONAL,
  473. IN PEFS_KEY Fek,
  474. IN PBYTE pbCert,
  475. IN DWORD cbCert,
  476. OUT PEFS_DATA_STREAM_HEADER * NewEfs
  477. );
  478. BOOL
  479. RemoveUsersFromEfsStream(
  480. IN PEFS_DATA_STREAM_HEADER pEfsStream,
  481. IN DWORD nHashes,
  482. IN PENCRYPTION_CERTIFICATE_HASH * pHashes,
  483. IN PEFS_KEY Fek,
  484. OUT PEFS_DATA_STREAM_HEADER * pNewEfsStream
  485. );
  486. BOOL
  487. QueryCertsFromEncryptedKeys(
  488. IN PENCRYPTED_KEYS pEncryptedKeys,
  489. OUT PDWORD pnUsers,
  490. OUT PENCRYPTION_CERTIFICATE_HASH ** pHashes
  491. );
  492. PCCERT_CONTEXT
  493. GetCertContextFromCertHash(
  494. IN PBYTE pbHash,
  495. IN DWORD cbHash,
  496. IN DWORD dwFlags,
  497. IN DWORD dwOpen
  498. );
  499. LPWSTR
  500. EfspGetCertDisplayInformation(
  501. IN PCCERT_CONTEXT pCertContext
  502. );
  503. VOID
  504. RecoveryInformationCallback(
  505. POLICY_NOTIFICATION_INFORMATION_CLASS ChangedInfoClass
  506. );
  507. VOID
  508. EfspRoleChangeCallback(
  509. POLICY_NOTIFICATION_INFORMATION_CLASS ChangedInfoClass
  510. );
  511. BOOL
  512. UpdateRecoveryPolicy(
  513. PLSAPR_POLICY_DOMAIN_EFS_INFO * PolicyEfsInfo,
  514. PBOOLEAN Reformatted
  515. );
  516. VOID
  517. FreeParsedRecoveryPolicy(
  518. PCURRENT_RECOVERY_POLICY ParsedRecoveryPolicy
  519. );
  520. BOOL
  521. GetPublicKey(
  522. HCRYPTKEY hKey,
  523. PBYTE * PublicKeyBlob,
  524. PDWORD KeyLength
  525. );
  526. DWORD
  527. CreatePublicKeyInformationCertificate(
  528. IN PSID pUserSid OPTIONAL,
  529. PBYTE pbCert,
  530. DWORD cbCert,
  531. OUT PEFS_PUBLIC_KEY_INFO * PublicKeyInformation
  532. );
  533. BOOL
  534. ParseRecoveryCertificate(
  535. IN PEFS_PUBLIC_KEY_INFO pPublicKeyInfo,
  536. OUT PBYTE * pbHash,
  537. OUT PDWORD cbHash,
  538. OUT PBYTE * pbPublicKey,
  539. OUT PDWORD cbPublicKey,
  540. OUT LPWSTR * lpDisplayInfo,
  541. OUT PCCERT_CONTEXT * pCertContext,
  542. OUT PSID * pSid
  543. );
  544. VOID
  545. FreeParsedRecoveryPolicy(
  546. PCURRENT_RECOVERY_POLICY ParsedRecoveryPolicy
  547. );
  548. NTSTATUS
  549. GetStreamInformation(
  550. IN HANDLE SourceFile,
  551. OUT PFILE_STREAM_INFORMATION * StreamInfoBase,
  552. PULONG StreamInfoSize
  553. );
  554. DWORD
  555. OpenFileStreams(
  556. IN HANDLE hSourceFile,
  557. IN ULONG ShareMode,
  558. IN ULONG Flag,
  559. IN PFILE_STREAM_INFORMATION StreamInfoBase,
  560. IN ULONG FileAccess,
  561. IN ULONG CreateDisposition,
  562. IN ULONG CreateOption,
  563. IN PFILE_FS_SIZE_INFORMATION VolInfo,
  564. OUT PUNICODE_STRING * StreamNames,
  565. OUT PHANDLE * StreamHandles,
  566. OUT PEFS_STREAM_SIZE * StreamSizes,
  567. OUT PULONG StreamCount
  568. );
  569. BOOLEAN
  570. GetDecryptFsInput(
  571. IN HANDLE Handle,
  572. OUT PUCHAR InputData,
  573. OUT PULONG InputDataSize
  574. );
  575. DWORD
  576. CopyFileStreams(
  577. PHANDLE SourceStreams,
  578. PHANDLE StreamHandles,
  579. ULONG StreamCount,
  580. PEFS_STREAM_SIZE StreamSizes,
  581. EFSP_OPERATION Operation,
  582. PUCHAR FsInputData,
  583. ULONG FsInputDataSize,
  584. PBOOLEAN CleanupSuccessful
  585. );
  586. BOOLEAN
  587. EfspValidateEfsStream(
  588. PEFS_DATA_STREAM_HEADER pEFS,
  589. PEFS_KEY Fek
  590. );
  591. BOOLEAN
  592. EfspChecksumEfs(
  593. PEFS_DATA_STREAM_HEADER pEFS,
  594. PEFS_KEY Fek
  595. );
  596. void
  597. DumpRecoveryKey(
  598. PRECOVERY_KEY_1_1 pRecoveryKey
  599. );
  600. LPWSTR
  601. MakeDNName(
  602. BOOLEAN RecoveryKey,
  603. IN PEFS_USER_INFO pEfsUserInfo
  604. );
  605. BOOL
  606. EncodeAndAlloc(
  607. DWORD dwEncodingType,
  608. LPCSTR lpszStructType,
  609. const void * pvStructInfo,
  610. PBYTE * pbEncoded,
  611. PDWORD pcbEncoded
  612. );
  613. BOOL
  614. EfspIsDomainUser(
  615. IN LPWSTR lpDomainName,
  616. OUT PBOOLEAN IsDomain
  617. );
  618. VOID
  619. EfspUnloadUserProfile(
  620. IN PEFS_USER_INFO pEfsUserInfo
  621. );
  622. BOOL
  623. EfspLoadUserProfile(
  624. IN PEFS_USER_INFO pEfsUserInfo,
  625. IN BOOLEAN bForceLoad
  626. );
  627. PWCHAR
  628. ConstructKeyPath(
  629. PWCHAR SidString
  630. );
  631. VOID
  632. EfsLogEntry (
  633. WORD wType,
  634. WORD wCategory,
  635. DWORD dwEventID,
  636. WORD wNumStrings,
  637. DWORD dwDataSize,
  638. LPCTSTR *lpStrings,
  639. LPVOID lpRawData
  640. );
  641. DWORD
  642. EfsGetCertNameFromCertContext(
  643. IN PCCERT_CONTEXT CertContext,
  644. OUT LPWSTR * UserDispName
  645. );
  646. DWORD
  647. EfsAddCertToCertStore(
  648. IN PCCERT_CONTEXT pCert,
  649. IN LPCWSTR pStoreName,
  650. OUT DWORD *ImpersonationError
  651. );
  652. BOOL
  653. EfsGetBasicConstraintExt(
  654. IN OUT PCERT_EXTENSION *basicRestraint
  655. );
  656. BOOL
  657. EfsGetAltNameExt(
  658. IN OUT PCERT_EXTENSION *altNameExt,
  659. IN LPWSTR UPNName
  660. );
  661. DWORD
  662. EfsMakeCertNames(
  663. IN PEFS_USER_INFO pEfsUserInfo,
  664. OUT LPWSTR *DispInfo,
  665. OUT LPWSTR *SubjectName,
  666. OUT LPWSTR *UPNName
  667. );
  668. DWORD
  669. EfsFindCertOid(
  670. IN LPSTR pEfsCertOid,
  671. IN PCCERT_CONTEXT pCertContext,
  672. OUT BOOL *OidFound
  673. );
  674. LONG
  675. EfsTimeExp(
  676. IN LPFILETIME CertExpTime
  677. );
  678. VOID
  679. EfsMarkCertAddedToStore(
  680. IN PEFS_USER_INFO pEfsUserInfo,
  681. IN DWORD StoreId
  682. );
  683. /////////////////////////////////////////////////////////////////////////////////////
  684. // /
  685. // /
  686. // Entry points for exported API /
  687. // /
  688. // /
  689. /////////////////////////////////////////////////////////////////////////////////////
  690. DWORD
  691. EncryptFileSrv(
  692. IN PEFS_USER_INFO pEfsUserData,
  693. IN PUNICODE_STRING SourceFileName,
  694. IN HANDLE LogFile
  695. );
  696. DWORD
  697. DecryptFileSrv(
  698. IN PUNICODE_STRING SourceFileName,
  699. IN HANDLE LogFileH,
  700. IN ULONG Recovery
  701. );
  702. DWORD
  703. AddUsersToFileSrv(
  704. IN PEFS_USER_INFO pEfsUserInfo,
  705. IN LPCWSTR lpFileName,
  706. IN DWORD nUsers,
  707. IN PENCRYPTION_CERTIFICATE * pEncryptionCertificates
  708. );
  709. DWORD
  710. QueryUsersOnFileSrv(
  711. IN LPCWSTR lpFileName,
  712. OUT PDWORD pnUsers,
  713. OUT PENCRYPTION_CERTIFICATE_HASH ** pUsers
  714. );
  715. DWORD
  716. QueryRecoveryAgentsSrv(
  717. IN LPCWSTR lpFileName,
  718. OUT PDWORD pnRecoveryAgents,
  719. OUT PENCRYPTION_CERTIFICATE_HASH ** pRecoveryAgents
  720. );
  721. DWORD
  722. RemoveUsersFromFileSrv(
  723. IN PEFS_USER_INFO PEfsUserInfo,
  724. IN LPCWSTR lpFileName,
  725. IN DWORD nUsers,
  726. IN PENCRYPTION_CERTIFICATE_HASH * pHashes
  727. );
  728. DWORD
  729. SetFileEncryptionKeySrv(
  730. IN PEFS_USER_INFO PEfsUserInfo,
  731. IN PENCRYPTION_CERTIFICATE pEncryptionCertificate
  732. );
  733. DWORD
  734. DuplicateEncryptionInfoFileSrv (
  735. PEFS_USER_INFO pEfsUserInfo,
  736. LPCWSTR lpSrcFileName,
  737. LPCWSTR lpDestFileName,
  738. LPCWSTR lpDestUncName,
  739. DWORD dwCreationDistribution,
  740. DWORD dwAttributes,
  741. PEFS_RPC_BLOB pRelativeSD,
  742. BOOL bInheritHandle
  743. );
  744. DWORD
  745. EfsFileKeyInfoSrv(
  746. IN LPCWSTR lpFileName,
  747. IN DWORD InfoClass,
  748. OUT PDWORD nbData,
  749. OUT PBYTE *pbData
  750. );
  751. DWORD
  752. EfsOpenFileRaw(
  753. IN LPCWSTR FileName,
  754. IN LPCWSTR LocalFileName,
  755. IN BOOL NetSession,
  756. IN ULONG Flags,
  757. OUT PVOID * Context
  758. );
  759. VOID
  760. EfsCloseFileRaw(
  761. IN PVOID Context
  762. );
  763. long
  764. EfsReadFileRaw(
  765. PVOID Context,
  766. PVOID EfsOutPipe
  767. );
  768. long
  769. EfsWriteFileRaw(
  770. PVOID Context,
  771. PVOID EfsInPipe
  772. );
  773. BOOL
  774. GetSaltLength(
  775. ALG_ID AlgID,
  776. DWORD *SaltLength,
  777. DWORD *SaltBlockLength
  778. );
  779. DWORD
  780. EfsAlignBlock(
  781. IN PVOID InKey,
  782. OUT PVOID *OutKey,
  783. OUT BOOLEAN *NewKey
  784. );
  785. VOID
  786. EfsGetPolRegSettings(
  787. IN PVOID lpThreadData,
  788. IN BOOLEAN timeExpired
  789. );
  790. VOID
  791. EfsApplyLastPolicy(
  792. IN BOOLEAN* pEfsDisabled
  793. );
  794. VOID
  795. EfsRemoveKey(
  796. VOID
  797. );
  798. DWORD
  799. EfsTryRenewCert(
  800. IN PEFS_USER_INFO pEfsUserInfo,
  801. IN PCCERT_CONTEXT pCertContext,
  802. OUT PCCERT_CONTEXT *pNewCertContext
  803. );
  804. DWORD
  805. EfsCreateNewCache(
  806. IN OUT PEFS_USER_INFO pEfsUserInfo,
  807. IN PCCERT_CONTEXT pCertContext
  808. );
  809. VOID
  810. EfspLogAttack(
  811. PEFS_USER_INFO pEfsUserInfo,
  812. DWORD attackID
  813. );
  814. extern LONG EFSDebugLevel;
  815. extern DESTable DesTable;
  816. extern UCHAR DriverSessionKey[DES_BLOCKLEN];
  817. extern HANDLE LsaPid;
  818. extern BOOLEAN EfspInDomain;
  819. #ifdef __cplusplus
  820. } // extern C
  821. #endif
  822. #endif // _EFSSRV_