mirror of https://github.com/tongzx/nt5src
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.
113 lines
2.7 KiB
113 lines
2.7 KiB
/*++
|
|
|
|
Copyright (c) 1991 - 1993 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
memcard.h
|
|
|
|
Abstract:
|
|
|
|
|
|
Author:
|
|
|
|
Neil Sandlin (neilsa) 26-Apr-99
|
|
|
|
Environment:
|
|
|
|
Kernel mode only.
|
|
|
|
Notes:
|
|
|
|
|
|
--*/
|
|
|
|
#ifndef _MEMCARD_H_
|
|
#define _MEMCARD_H_
|
|
|
|
|
|
#ifdef POOL_TAGGING
|
|
#ifdef ExAllocatePool
|
|
#undef ExAllocatePool
|
|
#endif
|
|
#define ExAllocatePool(a,b) ExAllocatePoolWithTag(a,b,'cmeM')
|
|
#endif
|
|
|
|
//
|
|
// The byte in the boot sector that specifies the type of media, and
|
|
// the values that it can assume. We can often tell what type of media
|
|
// is in the drive by seeing which controller parameters allow us to read
|
|
// the diskette, but some different densities are readable with the same
|
|
// parameters so we use this byte to decide the media type.
|
|
//
|
|
#pragma pack(1)
|
|
|
|
typedef struct _BOOT_SECTOR_INFO {
|
|
UCHAR JumpByte;
|
|
UCHAR Ignore1[2];
|
|
UCHAR OemData[8];
|
|
USHORT BytesPerSector;
|
|
UCHAR SectorsPerCluster;
|
|
USHORT ReservedSectors;
|
|
UCHAR NumberOfFATs;
|
|
USHORT RootEntries;
|
|
USHORT TotalSectors;
|
|
UCHAR MediaDescriptor;
|
|
USHORT SectorsPerFAT;
|
|
USHORT SectorsPerTrack;
|
|
USHORT Heads;
|
|
ULONG BigHiddenSectors;
|
|
ULONG BigTotalSectors;
|
|
} BOOT_SECTOR_INFO, *PBOOT_SECTOR_INFO;
|
|
|
|
#pragma pack()
|
|
|
|
|
|
|
|
//
|
|
// Runtime device structures
|
|
//
|
|
//
|
|
// There is one MEMCARD_EXTENSION attached to the device object of each
|
|
// MEMCARDpy drive. Only data directly related to that drive (and the media
|
|
// in it) is stored here; common data is in CONTROLLER_DATA. So the
|
|
// MEMCARD_EXTENSION has a pointer to the CONTROLLER_DATA.
|
|
//
|
|
|
|
typedef struct _MEMCARD_EXTENSION {
|
|
PDEVICE_OBJECT UnderlyingPDO;
|
|
PDEVICE_OBJECT TargetObject;
|
|
PDEVICE_OBJECT DeviceObject;
|
|
UNICODE_STRING DeviceName;
|
|
UNICODE_STRING LinkName;
|
|
UNICODE_STRING InterfaceString;
|
|
|
|
ULONG MediaIndex;
|
|
ULONG ByteCapacity;
|
|
BOOLEAN IsStarted;
|
|
BOOLEAN IsRemoved;
|
|
BOOLEAN IsMemoryMapped;
|
|
BOOLEAN NoDrive;
|
|
|
|
ULONGLONG HostBase;
|
|
PCHAR MemoryWindowBase;
|
|
ULONG MemoryWindowSize;
|
|
|
|
ULONG TechnologyIndex;
|
|
|
|
PCMCIA_INTERFACE_STANDARD PcmciaInterface;
|
|
PCMCIA_BUS_INTERFACE_STANDARD PcmciaBusInterface;
|
|
} MEMCARD_EXTENSION, *PMEMCARD_EXTENSION;
|
|
|
|
|
|
//
|
|
// macros for ReadWriteMemory
|
|
//
|
|
|
|
#define MEMCARD_READ(Extension, Offset, Buffer, Size) \
|
|
MemCardReadWrite(Extension, Offset, Buffer, Size, FALSE)
|
|
|
|
#define MEMCARD_WRITE(Extension, Offset, Buffer, Size) \
|
|
MemCardReadWrite(Extension, Offset, Buffer, Size, TRUE)
|
|
|
|
#endif // _MEMCARD_H_
|