📄 ntddvdeo.h
字号:
#define VIDEO_MODE_MONO_POINTER 0x02 // 1 if a monochrome hardware pointer
// is supported.
#define VIDEO_MODE_COLOR_POINTER 0x04 // 1 if a color hardware pointer is
// supported.
#define VIDEO_MODE_ANIMATE_START 0x08 // The pointer being passed down has
#define VIDEO_MODE_ANIMATE_UPDATE 0x10 // the same hotspot as the previous
// pointer
//
//MaxWidth - Widest pointer bitmap the miniport should be requested to load
// for either monochrome or color pointer.
//
//MaxHeight - widest pointer bitmap the miniport should be requested to load
// for either monochrome color pointer handled.
//
//HWPtrBitmapStart = first offset in bitmap of memory used to store hardware
// pointer bitmap, in CPU-addressable units (-1 if not applicable). For
// planar modes (like VGA mode 12h), this is a planar offset; for linear
// modes (like VGA mode 13h), this is a linear offset. The CPU-addressable
// translation in HC planar mode is assumed to be linearaddress/4,
// because there are four planes at each address.
//
//HWPtrBitmapEnd = last offset in bitmap of memory used to store hardware
// pointer bitmap (-1 if not applicable).
//
// Note: Miniport has options to reject any call to set a pointer.
//
//
// IOCTL_VIDEO_GET_BANK_SELECT_CODE - Called by the Windows display driver
// to get a block of executable code used
// to perform bank-switching in high
// resolution SVGA drivers.
//
// Gets information needed to implement banking control for a selected mode.
//
// Information used by this function is passed using the following structures:
//
//
// The input from the caller in the input buffer is a VIDEO_MODE structure, as
// described under IOCTL_VIDEO_SET_CURRENT_MODE.
//
// RequestedMode - mode index for which banking information is desired.
//
//
// Returned in output buffer.
//
typedef struct _VIDEO_BANK_SELECT {
ULONG Length;
ULONG Size;
ULONG BankingFlags;
ULONG BankingType;
ULONG PlanarHCBankingType;
ULONG BitmapWidthInBytes;
ULONG BitmapSize;
ULONG Granularity;
ULONG PlanarHCGranularity;
ULONG CodeOffset;
ULONG PlanarHCBankCodeOffset;
ULONG PlanarHCEnableCodeOffset;
ULONG PlanarHCDisableCodeOffset;
} VIDEO_BANK_SELECT, *PVIDEO_BANK_SELECT;
//
// Stored in the BankType and PlanarHCBankintType fields
//
typedef enum _VIDEO_BANK_TYPE {
VideoNotBanked = 0,
VideoBanked1RW,
VideoBanked1R1W,
VideoBanked2RW,
NumVideoBankTypes
} VIDEO_BANK_TYPE, *PVIDEO_BANK_TYPE;
//
// Defines for BankingFlags.
//
#define PLANAR_HC 0x00000001
//
//Note: planar high-color ("planar HC") mode is a special 8-bpp-and-up
// CPU addressing mode in which four bytes can be accessed at
// once by using the VGA's planar hardware. This mode is enabled
// by turning off the Chain4 bit (bit 3 in Sequence Controller
// register 4), so it is also known as non-Chain4 mode. Planar HC
// mode can greatly accelerate operations such as solid fills,
// some pattern fills, and some blits.
//
//Note: the term "CPU-addressable bytes" means offsets measured
// in bytes as accessed by the CPU. In 16-color modes, this
// merely means "measured in bytes" rather than "measured in
// pixels," where each byte contains 8 pixels, as usual.
// In normal high-color modes, "CPU-addressable bytes"
// is exactly what you'd expect; it's the number of pixels in 256
// color modes, pixels*2 in 16-bpp modes, and so on. However, in
// planar HC modes, there are four display memory bytes at every CPU-
// addressable byte, because four planes are at each address, so
// in 256 color modes the number of CPU-addressable bytes is
// pixels/4, in 16-bpp modes CPU-addressable bytes = pixels/2, and
// so on. Basically, "CPU-addressable bytes" just means the
// offsets the CPU needs to address banks properly in the
// specified mode.
//
//Note: the start address must be set to 0 (displayed pixels must
// start at offset 0 in display memory), and the banking windows
// must fit within the 64K area starting at A000:0; no 128K
// mappings, please, because there may be a monochrome adapter
// in the system.
//
//Length - Length of the basic structure. Used for versioning by checking the
// Length of the struct is at least as large as the value given by sizeof().
//
//Size - number of bytes required to hold all banking information for
// this mode, including the VIDEO_BANK_SELECT structure and all
// bank-switch code. This is the size of the buffer that
// VgaGetBankSelectCode requires in order properly to return info.
//
//BankingFlags - indicate the type of banking supported in this mode.
// PLANAR_HC - if set, indicates that planar high-color (HC) mode
// (non-Chain4 8-, 15-, 16-, 24-, and 32-bpp) is supported.
// If this bit is set, the following fields must be filled in:
// PlanarHCGranularity, pPlanarHCBankCode,
// pPlanarHCEnableCode, pPlanarHCDisableCode.
// This bit is ignored by the 16-color driver, as are the
// associated fields.
//
//BankingType - These are the banking types supported by the adapter
// when it is ina standard mode.
//
// VideoNotBanked - this mode does not support or require banking.
// VideoBanked1RW - this mode supports a single RW (readable and
// writable) banking window. The window is assumed to be
// 64K in size.
// VideoBanked1R1W - this mode supports a single window, but the
// window can be mapped to different areas of display memory
// for reads and for writes. The window is assumed to be
// 64K in size.
// VideoBanked2RW - this mode supports two independently mappable
// banking windows, each RW. Each window is assumed to be
// 32K in size. The second window is assumed
// to start immediately after the end of the first, at
// A000:8000.
//
//PlanarHCBankingType - These are the banking types supported by the
// adapter when it is in a PLANAR HC mode.
//
// See BankingType for defintions of each banking type.
//
//
//BitmapWidthInBytes - distance from start of one scan line to start
// of next, counted in CPU-addressable bytes (not pixels). The
// CPU-addressable distance from one scan line to the next is
// assumed to be BitmapWidthInBytes/4 in planar HC modes, because
// there are four planes at each address.
//
//BitmapSize - size of display memory in CPU-addressable bytes (for
// example, 256K on a 1 Mb SVGA in 16-color mode, because there
// are four bytes at each address). The CPU-addressable bitmap
// size is assumed to be BitmapSize/4 in planar HC modes, because
// there are four planes at each address.
//
//Granularity - granularity with which display memory may be mapped
// into a banking window. (That is, resolution with which the
// display memory address mapped to the start of a window may be
// set; anywhere from 1K to 64K, depending on the adapter. If
// Granularity < window size (either 64K or 32K), then adjacent
// banks can overlap, and broken rasters can always be avoided.
// If Granularity == window size, then banks are disjoint, and
// display memory is basically segmented into banks.) Granularity
// is measured in CPU-addressable bytes.
//
//PlanarHCGranularity - granularity with which display memory may be
// mapped into a banking window in planar HC mode.
// PlanarHCGranularity is measured in CPU-addressable bytes, and
// is typically but not always Granularity/4. Ignored in
// 16-color modes.
//
//CodeOffset - base of the code section in the structure.
//
//PlanarHCBankCodeOffset - offset from Code of executable code
// that performs planar HC mode bank switching. Ignored in
// 16-color modes.
//
//PlanarHCEnableCodeOffset - offset from Code of executable code
// that enables planar HC mode. Ignored in 16-color modes.
//
//PlanarHCDisableCodeOffset - offset from Code of executable code
// that disables planar HC mode. Ignored in 16-color modes.
//
//Specification for bank switch code at Code:
// Executes requested bank mappings.
//
// Input:
// EAX = bank number to which to map window #0
// EDX = bank number to which to map window #1
// interpreted according to BankingType as follows:
// VideoBanked1RW - the single window is mapped to bank EAX,
// EBX is ignored.
// VideoBanked1RW - the read window is mapped to bank EAX,
// the write window is mapped to bank EBX
// VideoBanked1R1W - the window at A000:0 is mapped to bank EAX,
// the window at A800:0 is mapped to bank EBX
//
// Output: none
//
// Note: the definition of "bank n" is the bank that starts at
// display memory offset Granularity*n. In other words,
// banks are assumed to start every Granularity CPU-addressable
// bytes, and are numbered from 0 to number of banks-1.
//
//Specification for planar HC executable code:
// ***To be filled in when we get to planar HC modes***
//
//
// IOCTL_VIDEO_MAP_VIDEO_MEMORY - Maps the frame buffer into the callers
// address space.
// IOCTL_VIDEO_UNMAP_VIDEO_MEMORY - Unmaps the frame buffer from the callers
// address space.
//
// Information used by this function is passed using the following structure:
//
typedef struct _VIDEO_MEMORY {
PVOID RequestedVirtualAddress;
} VIDEO_MEMORY, *PVIDEO_MEMORY;
//
//RequestedVirtualAddress - For MAP: Requested virtual address for the video
// memory. This value is optional. If zero is specified, the operating
// system will choose an appropriate location. For UNMAP: Virtual Address
// of the base of video memory. The size is implicit since it can not
// change (you can not add video memory dynamically!).
//
// IOCTL_VIDEO_SHARE_VIDEO_MEMORY - Maps the frame buffer to another process'
// address space. This IOCTL is initally
// defined to support DCI.
// IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY - Unmaps a previously shared buffer.
//
// Note: for the MAP_VIDEO_MEMORY_IOCTL, the process handle is passed in
// the VirtualAddress filed, while for this IOCTL the handle is explicit.
//
typedef struct _VIDEO_SHARE_MEMORY {
HANDLE ProcessHandle;
ULONG ViewOffset;
ULONG ViewSize;
PVOID RequestedVirtualAddress;
} VIDEO_SHARE_MEMORY, *PVIDEO_SHARE_MEMORY;
typedef struct _VIDEO_SHARE_MEMORY_INFORMATION {
ULONG SharedViewOffset;
ULONG SharedViewSize;
PVOID VirtualAddress;
} VIDEO_SHARE_MEMORY_INFORMATION, *PVIDEO_SHARE_MEMORY_INFORMATION;
//
// IOCTL_VIDEO_MAP_VIDEO_MEMORY - Returns the virtual address and size of
// the frame buffer and video memory in the
// caller's address space.
// This IOCTL must be called after a call
// to the MAP IOCTL has been made.
//
typedef struct _VIDEO_MEMORY_INFORMATION {
PVOID VideoRamBase;
ULONG VideoRamLength;
PVOID FrameBufferBase;
ULONG FrameBufferLength;
} VIDEO_MEMORY_INFORMATION, *PVIDEO_MEMORY_INFORMATION;
//
//VideoRamBase - Virtual address of the Video RAM in the callers address space
// (only valid if the memory is mapped.
//
//VideoRamLength - Linear length of the Video RAM in the caller's virtual
// address space (memory accessible through a bank switch mechanism is not
// described by this value).
// This value must be equal to VideoMemoryBitmapHeight * ScreenStride
//
//FrameBufferBase - Virtual address of the Frame Buffer in the caller's
// address space. The Frame buffer is the actively displayed part of Video
// Ram.
//
//FrameBufferLength - Linear length of the Frame Buffer in the caller's
// virtual address space (memory accessible through a bank switch mechanism
// is not described by this value).
// This value must be equal to VisScreenWidth * ScreenStride
//
//
// IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES - Returns the access range used to
// program the hardware directly.
// An array of these is returned if
// multiple ranges exist.
//
// IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES - Frees up the access ranges that were
// allocated by the QUERY_ACCESS_RANGES
// call.
//
// Information used by this function is passed using the following structure:
//
typedef struct _VIDEO_PUBLIC_ACCESS_RANGES {
ULONG InIoSpace;
ULONG MappedInIoSpace;
PVOID VirtualAddress;
} VIDEO_PUBLIC_ACCESS_RANGES, *PVIDEO_PUBLIC_ACCESS_RANGES;
//
//InIoSpace - Indicates if the hardware registers or ports are in IO space
// or in memory space.
//
//MappedInIoSpace - Indicates if under the current platform the registers or
// ports are mapped in IO Space or memory space.
//
//VirtualAddress - Location of the registers or IO ports as mapped under the
// current architecture.
//
//
// IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES - Returns the color information
// found in the monitors VDDPs
// description file.
//
// NOTE: This structure must be filled out completely. A subset of the
// values can not be returned.
//
typedef struct _VIDEO_COLOR_CAPABILITIES {
ULONG Length;
ULONG AttributeFlags;
LONG RedPhosphoreDecay;
LONG GreenPhosphoreDecay;
LONG BluePhosphoreDecay;
LONG WhiteChromaticity_x;
LONG WhiteChromaticity_y;
LONG WhiteChromaticity_Y;
LONG RedChromaticity_x;
LONG RedChromaticity_y;
LONG GreenChromaticity_x;
LONG GreenChromaticity_y;
LONG BlueChromaticity_x;
LONG BlueChromaticity_y;
LONG WhiteGamma;
LONG RedGamma;
LONG GreenGamma;
LONG BlueGamma;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -