[USBPORT] Add USB2_InitTT().
[reactos.git] / drivers / filters / mountmgr / mntmgr.h
index d0cf8a9..4153add 100644 (file)
@@ -4,23 +4,17 @@
 #include <ntifs.h>
 #include <mountdev.h>
 #include <ntddvol.h>
+#include <ntdddisk.h>
 #include <wdmguid.h>
 #include <ndk/psfuncs.h>
 #include <ntdddisk.h>
 
-/* Enter FIXME */
-#ifdef IsEqualGUID
-#undef IsEqualGUID
+#ifdef __GNUC__
+#define INIT_SECTION __attribute__((section ("INIT")))
+#else
+#define INIT_SECTION /* Done via alloc_text for MSC */
 #endif
 
-#define IsEqualGUID(rguid1, rguid2) (!RtlCompareMemory(rguid1, rguid2, sizeof(GUID)))
-
-#define FILE_READ_PROPERTIES  0x00000008
-#define FILE_WRITE_PROPERTIES 0x00000010
-
-#define GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER 0x80000000
-/* Leave FIXME */
-
 typedef struct _DEVICE_EXTENSION
 {
     PDEVICE_OBJECT DeviceObject;           // 0x0
@@ -61,7 +55,7 @@ typedef struct _DEVICE_INFORMATION
     UNICODE_STRING DeviceName;              // 0x2C
     BOOLEAN KeepLinks;                      // 0x34
     UCHAR SuggestedDriveLetter;             // 0x35
-    BOOLEAN Volume;                         // 0x36
+    BOOLEAN ManuallyRegistered;             // 0x36
     BOOLEAN Removable;                      // 0x37
     BOOLEAN LetterAssigned;                 // 0x38
     BOOLEAN NeedsReconcile;                 // 0x39
@@ -96,7 +90,7 @@ typedef struct _UNIQUE_ID_REPLICATE
 typedef struct _DATABASE_ENTRY
 {
     ULONG EntrySize;                // 0x00
-    ULONG DatabaseOffset;           // 0x04
+    ULONG EntryReferences;          // 0x04
     USHORT SymbolicNameOffset;      // 0x08
     USHORT SymbolicNameLength;      // 0x0A
     USHORT UniqueIdOffset;          // 0x0C
@@ -110,21 +104,32 @@ typedef struct _ASSOCIATED_DEVICE_ENTRY
     UNICODE_STRING String;                            // 0x0C
 } ASSOCIATED_DEVICE_ENTRY, *PASSOCIATED_DEVICE_ENTRY; // 0x14
 
+typedef struct _DEVICE_INFORMATION_ENTRY
+{
+    LIST_ENTRY DeviceInformationEntry;                  // 0x00
+    PDEVICE_INFORMATION DeviceInformation;              // 0x08
+} DEVICE_INFORMATION_ENTRY, *PDEVICE_INFORMATION_ENTRY; // 0x0C
+
 typedef struct _ONLINE_NOTIFICATION_WORK_ITEM
 {
-    WORK_QUEUE_ITEM;                                              // 0x00
+    WORK_QUEUE_ITEM WorkItem;                                     // 0x00
     PDEVICE_EXTENSION DeviceExtension;                            // 0x10
     UNICODE_STRING SymbolicName;                                  // 0x14
 } ONLINE_NOTIFICATION_WORK_ITEM, *PONLINE_NOTIFICATION_WORK_ITEM; // 0x1C
 
+typedef struct _RECONCILE_WORK_ITEM_CONTEXT
+{
+    PDEVICE_EXTENSION DeviceExtension;
+    PDEVICE_INFORMATION DeviceInformation;
+} RECONCILE_WORK_ITEM_CONTEXT, *PRECONCILE_WORK_ITEM_CONTEXT;
+
 typedef struct _RECONCILE_WORK_ITEM
 {
     LIST_ENTRY WorkerQueueListEntry;            // 0x00
     PIO_WORKITEM WorkItem;                      // 0x08
     PWORKER_THREAD_ROUTINE WorkerRoutine;       // 0x0C
     PVOID Context;                              // 0x10
-    PDEVICE_EXTENSION DeviceExtension;          // 0x14
-    PDEVICE_INFORMATION DeviceInformation;      // 0x18
+    RECONCILE_WORK_ITEM_CONTEXT;                // 0x14
 } RECONCILE_WORK_ITEM, *PRECONCILE_WORK_ITEM;   // 0x1C
 
 typedef struct _MIGRATE_WORK_ITEM
@@ -228,6 +233,12 @@ HasDriveLetter(
     IN PDEVICE_INFORMATION DeviceInformation
 );
 
+INIT_SECTION
+BOOLEAN
+MountmgrReadNoAutoMount(
+    IN PUNICODE_STRING RegistryPath
+);
+
 /* database.c */
 
 extern PWSTR DatabasePath;
@@ -286,6 +297,48 @@ QueryVolumeName(
     OUT PUNICODE_STRING VolumeName
 );
 
+HANDLE
+OpenRemoteDatabase(
+    IN PDEVICE_INFORMATION DeviceInformation,
+    IN BOOLEAN MigrateDatabase
+);
+
+PDATABASE_ENTRY
+GetRemoteDatabaseEntry(
+    IN HANDLE Database,
+    IN LONG StartingOffset 
+);
+
+NTSTATUS
+WriteRemoteDatabaseEntry(
+    IN HANDLE Database,
+    IN LONG Offset,
+    IN PDATABASE_ENTRY Entry
+);
+
+NTSTATUS
+CloseRemoteDatabase(
+    IN HANDLE Database
+);
+
+NTSTATUS
+AddRemoteDatabaseEntry(
+    IN HANDLE Database,
+    IN PDATABASE_ENTRY Entry
+);
+
+NTSTATUS
+DeleteRemoteDatabaseEntry(
+    IN HANDLE Database,
+    IN LONG StartingOffset
+);
+
+VOID
+NTAPI
+ReconcileThisDatabaseWithMasterWorker(
+    IN PVOID Parameter
+);
+
 /* device.c */
 
 DRIVER_DISPATCH MountMgrDeviceControl;
@@ -356,6 +409,18 @@ HasNoDriveLetterEntry(
     IN PMOUNTDEV_UNIQUE_ID UniqueId
 );
 
+VOID
+UpdateReplicatedUniqueIds(
+    IN PDEVICE_INFORMATION DeviceInformation,
+    IN PDATABASE_ENTRY DatabaseEntry 
+);
+
+BOOLEAN
+IsUniqueIdPresent(
+    IN PDEVICE_EXTENSION DeviceExtension,
+    IN PDATABASE_ENTRY DatabaseEntry 
+);
+
 /* point.c */
 NTSTATUS
 MountMgrCreatePointWorker(
@@ -446,4 +511,10 @@ DeleteSymbolicLinkNameFromMemory(
     IN BOOLEAN MarkOffline
 );
 
+NTSTATUS
+MountMgrQuerySymbolicLink(
+    IN PUNICODE_STRING SymbolicName,
+    IN OUT PUNICODE_STRING LinkTarget
+);
+
 #endif /* _MNTMGR_H_ */