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.
 
 
 
 
 
 

146 lines
3.2 KiB

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
spti.h
Abstract:
These are the structures and defines that are used in the
SPTI.C.
Author:
Revision History:
--*/
#include <sptlib.h>
#include <conio.h> // for printf, _getch, etc.
#include <strsafe.h> // safer string functions
#if defined(_X86_)
#define PAGE_SIZE 0x1000
#define PAGE_SHIFT 12L
#elif defined(_AMD64_)
#define PAGE_SIZE 0x1000
#define PAGE_SHIFT 12L
#elif defined(_IA64_)
#define PAGE_SIZE 0x2000
#define PAGE_SHIFT 13L
#else
// undefined platform?
#define PAGE_SIZE 0x1000
#define PAGE_SHIFT 12L
#endif
#define MAXIMUM_BUFFER_SIZE 0x990 // 2448, largest single CD sector size, smaller than one page
#define MIN(_a,_b) (((_a) <= (_b)) ? (_a) : (_b))
#define MAX(_a,_b) (((_a) >= (_b)) ? (_a) : (_b))
//
// neat little hacks to count number of bits set
//
__inline ULONG CountOfSetBits(ULONG _X)
{ ULONG i = 0; while (_X) { _X &= _X - 1; i++; } return i; }
__inline ULONG CountOfSetBits32(ULONG32 _X)
{ ULONG i = 0; while (_X) { _X &= _X - 1; i++; } return i; }
__inline ULONG CountOfSetBits64(ULONG64 _X)
{ ULONG i = 0; while (_X) { _X &= _X - 1; i++; } return i; }
#define SET_FLAG(Flags, Bit) ((Flags) |= (Bit))
#define CLEAR_FLAG(Flags, Bit) ((Flags) &= ~(Bit))
#define TEST_FLAG(Flags, Bit) (((Flags) & (Bit)) != 0)
#define BOOLEAN_TO_STRING(_b_) \
( (_b_) ? "True" : "False" )
typedef struct SPT_ALIGNED_MEMORY {
PVOID A; // aligned pointer
PVOID U; // unaligned pointer
PUCHAR File; // file allocated from
ULONG Line; // line number allocated from
} SPT_ALIGNED_MEMORY, *PSPT_ALIGNED_MEMORY;
//
// Allocates a device-aligned buffer
//
#define AllocateAlignedBuffer(Allocation,AlignmentMask,Size) \
pAllocateAlignedBuffer(Allocation,AlignmentMask,Size,__FILE__, __LINE__)
BOOL
pAllocateAlignedBuffer(
PSPT_ALIGNED_MEMORY Allocation,
ULONG AlignmentMask,
SIZE_T AllocationSize,
PUCHAR File,
ULONG Line
);
//
// Free's a previously-allocated aligned buffer
//
VOID
FreeAlignedBuffer(
PSPT_ALIGNED_MEMORY Allocation
);
//
// Prints a buffer to the screen in hex and ASCII
//
VOID
PrintBuffer(
IN PVOID InputBuffer,
IN SIZE_T Size
);
//
// Prints the formatted message for a given error code
//
VOID
PrintError(
ULONG Error
);
//
// Prints the device descriptor in a formatted manner
//
VOID
PrintDeviceDescriptor(
PSTORAGE_DEVICE_DESCRIPTOR DeviceDescriptor
);
//
// Prints the adapter descriptor in a formatted manner
//
VOID
PrintAdapterDescriptor(
PSTORAGE_ADAPTER_DESCRIPTOR AdapterDescriptor
);
//
// Gets (and prints) the device and adapter descriptor
// for a device. Returns the alignment mask (required
// for allocating a properly aligned buffer).
//
BOOL
GetAlignmentMaskForDevice(
HANDLE DeviceHandle,
PULONG AlignmentMask
);
#if 0
VOID PrintInquiryData(PVOID);
VOID PrintStatusResults(BOOL, DWORD, PSCSI_PASS_THROUGH_WITH_BUFFERS, ULONG);
VOID PrintSenseInfo(PSCSI_PASS_THROUGH_WITH_BUFFERS);
#endif //0