/*++

Copyright (c) 1998  Microsoft Corporation

Module Name:

    newmount.h

Abstract:

    Replacement for mountie.h

Author:

    Gor Nishanov (GorN) 31-July-1998

Environment:

    User Mode

Revision History:


--*/

typedef struct _MOUNTIE_PARTITION {
    LARGE_INTEGER   StartingOffset;
    LARGE_INTEGER   PartitionLength;
    DWORD           PartitionNumber;
    UCHAR           PartitionType;
    UCHAR           DriveLetter;
    USHORT          Reserved; // must be 0 //
} MOUNTIE_PARTITION, *PMOUNTIE_PARTITION;

// PARTITION_INFORMATION

typedef struct _MOUNTIE_VOLUME {
    DWORD         Signature;
    DWORD         PartitionCount;
    MOUNTIE_PARTITION Partition[1];
} MOUNTIE_VOLUME, *PMOUNTIE_VOLUME;


#define NICE_DRIVE_LETTER(x) ((x)?(x):'?')

NTSTATUS
GetAssignedLetter ( 
    PWCHAR deviceName, 
    PCHAR driveLetter 
    );

PVOID
DoIoctlAndAllocate(
    IN HANDLE FileHandle,
    IN DWORD  IoControlCode,
    IN PVOID  InBuf,
    IN ULONG  InBufSize,
    OUT LPDWORD BytesReturned
    );

NTSTATUS
DevfileOpen(
    OUT HANDLE *Handle,
    IN wchar_t *pathname
    );

VOID
DevfileClose(
    IN HANDLE Handle
    );


DWORD
MountieRecreateVolumeInfoFromHandle(
   IN  HANDLE FileHandle,
   IN  DWORD  HarddiskNo,
   IN  HANDLE ResourceHandle,
   IN OUT PMOUNTIE_INFO Info
   );

VOID
MountieCleanup(
   IN OUT PMOUNTIE_INFO Info
   );

DWORD 
VolumesReady(
   IN PMOUNTIE_INFO Info,
   IN PDISK_RESOURCE ResourceEntry
   );

DWORD
MountieFindPartitionsForDisk(
    IN DWORD HarddiskNo,
    OUT PMOUNTIE_INFO MountieInfo
    );

DWORD
DisksGetLettersForSignature(
    IN PDISK_RESOURCE ResourceEntry
    );

DWORD
MountieUpdate(
   PMOUNTIE_INFO Info,
   PDISK_RESOURCE ResourceEntry
   );

DWORD
MountieVerify(
   PMOUNTIE_INFO info, 
   PDISK_RESOURCE ResourceEntry,
   BOOL UseMountMgr
   );

DWORD 
MountiePartitionCount(
   IN PMOUNTIE_INFO Info
   );

PMOUNTIE_PARTITION
MountiePartition(
   IN PMOUNTIE_INFO Info,
   IN DWORD Index
   );

VOID
MountiePrint(   
   IN PMOUNTIE_INFO Info,
   IN HANDLE ResourceHandle
   );

NTSTATUS
DevfileIoctl(
    IN HANDLE Handle,
    IN DWORD Ioctl,
    IN PVOID InBuf,
    IN ULONG InBufSize,
    IN OUT PVOID OutBuf,
    IN DWORD OutBufSize,
    OUT LPDWORD returnLength
    );