279 lines
5.1 KiB
C
279 lines
5.1 KiB
C
/*++
|
||
|
||
Copyright (c) 1995-2000 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
fsrtlp.h
|
||
|
||
Abstract:
|
||
|
||
This header file is included by largemcb.h, and is used to stub out the
|
||
kernel-only subroutine calls, as well as declare types and functions
|
||
provided by the MCB package.
|
||
|
||
Author:
|
||
|
||
Matthew Bradburn (mattbr) 19-August-95
|
||
|
||
Environment:
|
||
|
||
ULIB, User Mode
|
||
|
||
--*/
|
||
|
||
#include <nt.h>
|
||
#include <ntrtl.h>
|
||
#include <nturtl.h>
|
||
|
||
#define NTKERNELAPI
|
||
|
||
typedef ULONG ERESOURCE, *PERESOURCE;
|
||
typedef ULONG FAST_MUTEX, *PFAST_MUTEX;
|
||
typedef ULONG KEVENT, *PKEVENT;
|
||
typedef ULONG KMUTEX, *PKMUTEX;
|
||
|
||
typedef enum _POOL_TYPE {
|
||
NonPagedPool,
|
||
PagedPool,
|
||
NonPagedPoolMustSucceed,
|
||
DontUseThisType,
|
||
NonPagedPoolCacheAligned,
|
||
PagedPoolCacheAligned,
|
||
NonPagedPoolCacheAlignedMustS,
|
||
MaxPoolType
|
||
} POOL_TYPE;
|
||
|
||
typedef ULONG VBN, *PVBN;
|
||
typedef ULONG LBN, *PLBN;
|
||
typedef LONGLONG LBN64, *PLBN64;
|
||
|
||
#define PAGED_CODE() /* nothing */
|
||
#define DebugTrace(a, b, c, d) /* nothing */
|
||
#define ExInitializeFastMutex(a) /* nothing */
|
||
#define ExAcquireFastMutex(a) /* nothing */
|
||
#define ExReleaseFastMutex(a) /* nothing */
|
||
#define ExAcquireSpinLock(a, b) /* nothing */
|
||
#define ExReleaseSpinLock(a, b) /* nothing */
|
||
|
||
#define ExIsFullZone(a) FALSE
|
||
#define ExAllocateFromZone(a) ((PVOID)1)
|
||
#define ExIsObjectInFirstZoneSegment(a, b) TRUE
|
||
#define ExFreeToZone(a, p) /* nothing */
|
||
|
||
#define try_return(S) { S; goto try_exit; }
|
||
|
||
extern
|
||
PVOID
|
||
MemAlloc(
|
||
IN ULONG Size
|
||
);
|
||
|
||
extern
|
||
PVOID
|
||
MemAllocOrRaise(
|
||
IN ULONG Size
|
||
);
|
||
|
||
extern
|
||
VOID
|
||
MemFree(
|
||
IN PVOID Addr
|
||
);
|
||
|
||
#define ExAllocatePool(type, size) MemAlloc(size)
|
||
#define FsRtlAllocatePool(type, size) MemAllocOrRaise(size)
|
||
#define ExFreePool(p) MemFree(p)
|
||
|
||
//
|
||
// Large Integer Mapped Control Blocks routines, implemented in LargeMcb.c
|
||
//
|
||
// An LARGE_MCB is an opaque structure but we need to declare the size of
|
||
// it here so that users can allocate space for one. Consequently the
|
||
// size computation here must be updated by hand if the MCB changes.
|
||
//
|
||
// Current the structure consists of the following.
|
||
// PVOID
|
||
// ULONG
|
||
// ULONG
|
||
// POOL_TYPE (enumerated type)
|
||
// PVOID
|
||
//
|
||
// We will round the structure up to a quad-word boundary.
|
||
//
|
||
|
||
typedef struct _LARGE_MCB {
|
||
#ifdef _WIN64
|
||
ULONG Opaque[ 8 ];
|
||
#else
|
||
ULONG Opaque[ 6 ];
|
||
#endif
|
||
} LARGE_MCB;
|
||
typedef LARGE_MCB *PLARGE_MCB;
|
||
|
||
NTKERNELAPI
|
||
VOID
|
||
FsRtlInitializeLargeMcb (
|
||
IN PLARGE_MCB Mcb,
|
||
IN POOL_TYPE PoolType
|
||
);
|
||
|
||
NTKERNELAPI
|
||
VOID
|
||
FsRtlUninitializeLargeMcb (
|
||
IN PLARGE_MCB Mcb
|
||
);
|
||
|
||
NTKERNELAPI
|
||
VOID
|
||
FsRtlTruncateLargeMcb (
|
||
IN PLARGE_MCB Mcb,
|
||
IN LONGLONG Vbn
|
||
);
|
||
|
||
NTKERNELAPI
|
||
BOOLEAN
|
||
FsRtlAddLargeMcbEntry (
|
||
IN PLARGE_MCB Mcb,
|
||
IN LONGLONG Vbn,
|
||
IN LONGLONG Lbn,
|
||
IN LONGLONG SectorCount
|
||
);
|
||
|
||
NTKERNELAPI
|
||
VOID
|
||
FsRtlRemoveLargeMcbEntry (
|
||
IN PLARGE_MCB Mcb,
|
||
IN LONGLONG Vbn,
|
||
IN LONGLONG SectorCount
|
||
);
|
||
|
||
NTKERNELAPI
|
||
BOOLEAN
|
||
FsRtlLookupLargeMcbEntry (
|
||
IN PLARGE_MCB Mcb,
|
||
IN LONGLONG Vbn,
|
||
OUT PLONGLONG Lbn OPTIONAL,
|
||
OUT PLONGLONG SectorCountFromLbn OPTIONAL,
|
||
OUT PLONGLONG StartingLbn OPTIONAL,
|
||
OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
|
||
OUT PULONG Index OPTIONAL
|
||
);
|
||
|
||
NTKERNELAPI
|
||
BOOLEAN
|
||
FsRtlLookupLastLargeMcbEntry (
|
||
IN PLARGE_MCB Mcb,
|
||
OUT PLONGLONG Vbn,
|
||
OUT PLONGLONG Lbn
|
||
);
|
||
|
||
NTKERNELAPI
|
||
ULONG
|
||
FsRtlNumberOfRunsInLargeMcb (
|
||
IN PLARGE_MCB Mcb
|
||
);
|
||
|
||
NTKERNELAPI
|
||
BOOLEAN
|
||
FsRtlGetNextLargeMcbEntry (
|
||
IN PLARGE_MCB Mcb,
|
||
IN ULONG RunIndex,
|
||
OUT PLONGLONG Vbn,
|
||
OUT PLONGLONG Lbn,
|
||
OUT PLONGLONG SectorCount
|
||
);
|
||
|
||
NTKERNELAPI
|
||
BOOLEAN
|
||
FsRtlSplitLargeMcb (
|
||
IN PLARGE_MCB Mcb,
|
||
IN LONGLONG Vbn,
|
||
IN LONGLONG Amount
|
||
);
|
||
|
||
|
||
//
|
||
// Mapped Control Blocks routines, implemented in Mcb.c
|
||
//
|
||
// An MCB is an opaque structure but we need to declare the size of
|
||
// it here so that users can allocate space for one. Consequently the
|
||
// size computation here must be updated by hand if the MCB changes.
|
||
//
|
||
|
||
typedef struct _MCB {
|
||
ULONG Opaque[ 4 + (sizeof(PKMUTEX)+3)/4 ];
|
||
} MCB;
|
||
typedef MCB *PMCB;
|
||
|
||
NTKERNELAPI
|
||
VOID
|
||
FsRtlInitializeMcb (
|
||
IN PMCB Mcb,
|
||
IN POOL_TYPE PoolType
|
||
);
|
||
|
||
NTKERNELAPI
|
||
VOID
|
||
FsRtlUninitializeMcb (
|
||
IN PMCB Mcb
|
||
);
|
||
|
||
NTKERNELAPI
|
||
VOID
|
||
FsRtlTruncateMcb (
|
||
IN PMCB Mcb,
|
||
IN VBN Vbn
|
||
);
|
||
|
||
NTKERNELAPI
|
||
BOOLEAN
|
||
FsRtlAddMcbEntry (
|
||
IN PMCB Mcb,
|
||
IN VBN Vbn,
|
||
IN LBN Lbn,
|
||
IN ULONG SectorCount
|
||
);
|
||
|
||
NTKERNELAPI
|
||
VOID
|
||
FsRtlRemoveMcbEntry (
|
||
IN PMCB Mcb,
|
||
IN VBN Vbn,
|
||
IN ULONG SectorCount
|
||
);
|
||
|
||
NTKERNELAPI
|
||
BOOLEAN
|
||
FsRtlLookupMcbEntry (
|
||
IN PMCB Mcb,
|
||
IN VBN Vbn,
|
||
OUT PLBN Lbn,
|
||
OUT PULONG SectorCount OPTIONAL,
|
||
OUT PULONG Index
|
||
);
|
||
|
||
NTKERNELAPI
|
||
BOOLEAN
|
||
FsRtlLookupLastMcbEntry (
|
||
IN PMCB Mcb,
|
||
OUT PVBN Vbn,
|
||
OUT PLBN Lbn
|
||
);
|
||
|
||
NTKERNELAPI
|
||
ULONG
|
||
FsRtlNumberOfRunsInMcb (
|
||
IN PMCB Mcb
|
||
);
|
||
|
||
NTKERNELAPI
|
||
BOOLEAN
|
||
FsRtlGetNextMcbEntry (
|
||
IN PMCB Mcb,
|
||
IN ULONG RunIndex,
|
||
OUT PVBN Vbn,
|
||
OUT PLBN Lbn,
|
||
OUT PULONG SectorCount
|
||
);
|