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.
 
 
 
 
 
 

143 lines
3.8 KiB

/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
ntrtlmmapio.h
Abstract:
Functions to aid in
rigorously safe
reasonably efficient
reasonably easy to code
memory mapped i/o that captures with "tight" __try/__excepts to
catch status_in_page_errors, and captures only as much as is needed,
like only individual struct fields, to keep stack usage low.
Author:
Jay Krell (JayKrell) January 2002
Revision History:
--*/
#ifndef _NTRTLMMAPIO_
#define _NTRTLMMAPIO_
#if (_MSC_VER > 1020)
#pragma once
#endif
#ifdef __cplusplus
extern "C" {
#endif
#pragma warning(disable:4214) // bit field types other than int
#pragma warning(disable:4201) // nameless struct/union
#pragma warning(disable:4115) // named type definition in parentheses
#pragma warning(disable:4127) // condition expression is constant
typedef unsigned char BYTE;
typedef BYTE * PBYTE;
typedef CONST BYTE * PCBYTE;
typedef CONST VOID * PCVOID;
//
// if (Index < GetExceptionInformation()->ExceptionRecord->NumberParameters)
// Info = GetExceptionInformation()->ExceptionRecord->ExceptionInformation[Index]
//
#define RTL_IN_PAGE_ERROR_EXCEPTION_INFO_IS_WRITE_INDEX 0
#define RTL_IN_PAGE_ERROR_EXCEPTION_INFO_FAULTING_VA_INDEX 1
#define RTL_IN_PAGE_ERROR_EXCEPTION_INFO_UNDERLYING_STATUS_INDEX 2
NTSTATUS
NTAPI
RtlCopyMappedMemory(
PVOID ToAddress,
PCVOID FromAddress,
SIZE_T Size
);
NTSYSAPI
NTSTATUS
NTAPI
RtlCopyMemoryFromMappedView(
PCVOID ViewBase,
SIZE_T ViewSize,
PVOID ToAddress,
PCVOID FromAddress,
SIZE_T Size,
PSIZE_T BytesCopied OPTIONAL,
PEXCEPTION_RECORD ExceptionRecordOut OPTIONAL
);
NTSYSAPI
NTSTATUS
NTAPI
RtlMappedViewStrlen(
PCVOID VoidViewBase,
SIZE_T ViewSize,
PCVOID VoidString,
OUT PSIZE_T OutLength OPTIONAL
);
NTSYSAPI
NTSTATUS
NTAPI
RtlMappedViewRangeCheck(
PCVOID ViewBase,
SIZE_T ViewSize,
PCVOID DataAddress,
SIZE_T DataSize
);
typedef struct _MEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_MEMBER_DESCRIPTOR {
SIZE_T MemberSize;
SIZE_T MemberOffsetInFile;
SIZE_T MemberOffsetInMemory;
} MEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_MEMBER_DESCRIPTOR, *PMEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_MEMBER_DESCRIPTOR;
typedef const MEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_MEMBER_DESCRIPTOR * PCMEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_MEMBER_DESCRIPTOR;
typedef struct _MEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_DESCRIPTOR {
SIZE_T EntireStructFileSize;
SIZE_T PartialStructMemorySize;
SIZE_T NumberOfMembers;
PCMEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_MEMBER_DESCRIPTOR MemberDescriptors;
} MEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_DESCRIPTOR, *PMEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_DESCRIPTOR;
typedef const MEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_DESCRIPTOR * PCMEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_DESCRIPTOR;
NTSYSAPI
NTSTATUS
NTAPI
RtlMemoryMappedIoCapturePartialStruct(
PCVOID ViewBase,
SIZE_T ViewSize,
PCMEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_DESCRIPTOR Descriptor,
PCVOID VoidStructInViewBase,
PVOID VoidSafeBuffer,
SIZE_T SafeBufferSize
);
#define RTL_VALIDATE_MEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_DESCRIPTOR_DISPOSITION_GOOD 1
#define RTL_VALIDATE_MEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_DESCRIPTOR_DISPOSITION_BAD 2
NTSYSAPI
NTSTATUS
NTAPI
RtlValidateMemoryMappedIoCapturePartialStructDescriptor(
PCMEMORY_MAPPED_IO_CAPTURE_PARTIAL_STRUCT_DESCRIPTOR Struct,
OUT PULONG Disposition,
OUT PULONG_PTR Detail OPTIONAL,
OUT PULONG_PTR Detail2 OPTIONAL
);
#ifdef __cplusplus
} // extern "C"
#endif
#endif