reactos/modules/rosapps/include/vfd/vfdio.h

394 lines
8.8 KiB
C
Raw Normal View History

/*
vfdio.h
Virtual Floppy Drive for Windows
Kernel mode driver / user mode program interface header
Copyright (C) 2003-2005 Ken Kato
*/
#ifndef _VFDIO_H_
#define _VFDIO_H_
#ifndef __T
#ifdef _NTDDK_
#define __T(x) L ## x
#else
#define __T(x) x
#endif
#endif
#ifndef _T
#define _T(x) __T(x)
#endif
//
// Device/driver setting registry value names
//
#define VFD_REG_DEVICE_NUMBER _T("NumberOfDisks")
#define VFD_REG_TRACE_FLAGS _T("TraceFlags")
#define VFD_REG_DRIVE_LETTER _T("DriveLetter")
//
// Device object interface base name
//
#define VFD_DEVICE_BASENAME _T("VirtualFD")
//
// sector size constants and macros
//
#define VFD_BYTES_PER_SECTOR 512
#define VFD_SECTOR_ALIGN_MASK (VFD_BYTES_PER_SECTOR - 1)
#define VFD_BYTE_SHIFT_COUNT 9
#define VFD_BYTE_TO_SECTOR(b) ((b) >> VFD_BYTE_SHIFT_COUNT)
#define VFD_SECTOR_TO_BYTE(s) ((s) << VFD_BYTE_SHIFT_COUNT)
#define VFD_SECTOR_ALIGNED(b) (((b) & VFD_SECTOR_ALIGN_MASK) == 0)
//
// Fill character for formatting media
//
#define VFD_FORMAT_FILL_DATA (UCHAR)0xf6
//
// Image information structure
// Used for IOCTL_VFD_OPEN_IMAGE and IOCTL_VFD_QUERY_IMAGE
//
#pragma pack (push,2)
#ifdef _MSC_VER
#pragma warning (push)
#pragma warning (disable: 4200) // Zero sized struct member warning
#endif
typedef struct _VFD_IMAGE_INFO {
VFD_DISKTYPE DiskType; // VFD_DISKTYPE_xxx value in vfdtypes.h
VFD_MEDIA MediaType; // VFD_MEDIA_xxx value in vfdtypes.h
VFD_FLAGS MediaFlags; // VFD_FLAG_xxx value in vfdtypes.h
VFD_FILETYPE FileType; // VFD_FILETYE_xxx value in vfdtypes.h
ULONG ImageSize; // actual image size in bytes
USHORT NameLength; // length in bytes of the file name
CHAR FileName[0]; // variable length file name string
} VFD_IMAGE_INFO, *PVFD_IMAGE_INFO;
#ifdef _MSC_VER
#pragma warning (pop)
#endif
#pragma pack (pop)
//
// Device IO control codes
//
/*
IOCTL_VFD_OPEN_IMAGE
Open an existing floppy image file or create an empty RAM disk
Input:
buffer containing a VFD_IMAGE_INFO structure followed by
an image file name
InputLength:
sizeof(VFD_IMAGE_INFO) plus length of the image file name
Output:
Not used with this operation; set to NULL.
Output Length:
Not used with this operation; set to zero.
Return:
STATUS_INVALID_PARAMETER input buffer size < sizeof(VFD_IMAGE_INFO)
or any other parameter errors
STATUS_DEVICE_BUSY an image is already opened
STATUS_ACCESS_DENIED file access error. returned also when the
file is compressed / encrypted
*/
#define IOCTL_VFD_OPEN_IMAGE CTL_CODE( \
IOCTL_DISK_BASE, \
0x800, \
METHOD_BUFFERED, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS)
/*
IOCTL_VFD_CLOSE_IMAGE
Close the current virtual floppy image
Input:
Not used with this operation; set to NULL.
Input Length:
Not used with this operation; set to zero.
Output:
Not used with this operation; set to NULL.
Output Length:
Not used with this operation; set to zero.
Return:
STATUS_NO_MEDIA_IN_DEVICE image is not opened
*/
#define IOCTL_VFD_CLOSE_IMAGE CTL_CODE( \
IOCTL_DISK_BASE, \
0x801, \
METHOD_NEITHER, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS)
/*
IOCTL_VFD_QUERY_IMAGE
Get the current image information
Input:
Not used with this operation; set to NULL.
Input Length:
Not used with this operation; set to zero.
Output:
Buffer to receive a VFD_IMAGE_INFO data structure
Output Length:
must be long enough to hold a VFD_IMAGE_INFO with the image file name
Return:
STATUS_BUFFER_TOO_SMALL buffer length < sizeof(VFD_IMAGE_INFO)
STATUS_BUFFER_OVERFLOW buffer cannot hold the image file name.
NameLength member contains the file name
length (number of bytes). See this value
to decide necessary buffer length.
*/
#define IOCTL_VFD_QUERY_IMAGE CTL_CODE( \
IOCTL_DISK_BASE, \
0x802, \
METHOD_BUFFERED, \
FILE_READ_ACCESS)
/*
IOCTL_VFD_SET_LINK
Create or delete a persistent drive letter
On Windows NT, this command simply creates a symbolic link.
On Windows 2000/XP, the driver calls the Mount Manager to manipulate
a drive letter.
Input:
buffer containing a drive letter 'A' - 'Z' to create a drive letter,
or 0 to delete the current drive letter.
Input Length:
sizeof(CHAR) or larger
Output:
Not used with this operation; set to NULL.
Output Length:
Not used with this operation; set to zero.
Return:
STATUS_INVALID_PARAMETER input length == 0 or
any other parameter errors
*/
#define IOCTL_VFD_SET_LINK CTL_CODE( \
IOCTL_DISK_BASE, \
0x803, \
METHOD_BUFFERED, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS)
/*
IOCTL_VFD_QUERY_LINK
Get the current persistent drive letter
Input:
Not used with this operation; set to NULL.
Input Length:
Not used with this operation; set to zero.
Output:
buffer to receive the current drive letter.
0 is returned if there is none.
Output Length:
sizeof(CHAR) or larger
Return:
STATUS_BUFFER_TOO_SMALL buffer length < sizeof(CHAR)
*/
#define IOCTL_VFD_QUERY_LINK CTL_CODE( \
IOCTL_DISK_BASE, \
0x804, \
METHOD_BUFFERED, \
FILE_READ_ACCESS)
/*
IOCTL_VFD_SET_PROTECT
Enable the virtual media write protection
Input:
Not used with this operation; set to NULL.
Input Length:
Not used with this operation; set to zero.
Output:
Not used with this operation; set to NULL.
Output Length:
Not used with this operation; set to zero.
Return:
STATUS_NO_MEDIA_IN_DEVICE image is not opened
*/
#define IOCTL_VFD_SET_PROTECT CTL_CODE( \
IOCTL_DISK_BASE, \
0x805, \
METHOD_NEITHER, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS)
/*
IOCTL_VFD_CLEAR_PROTECT
Disable the virtual media write protection
Input:
Not used with this operation; set to NULL.
Input Length:
Not used with this operation; set to zero.
Output:
Not used with this operation; set to NULL.
Output Length:
Not used with this operation; set to zero.
Return:
STATUS_NO_MEDIA_IN_DEVICE image is not opened
*/
#define IOCTL_VFD_CLEAR_PROTECT CTL_CODE( \
IOCTL_DISK_BASE, \
0x806, \
METHOD_NEITHER, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS)
/*
IOCTL_VFD_RESET_MODIFY
Reset the data modify flag
Input:
Not used with this operation; set to NULL.
Input Length:
Not used with this operation; set to zero.
Output:
Not used with this operation; set to NULL.
Output Length:
Not used with this operation; set to zero.
Return:
STATUS_NO_MEDIA_IN_DEVICE image is not opened
*/
#define IOCTL_VFD_RESET_MODIFY CTL_CODE( \
IOCTL_DISK_BASE, \
0x807, \
METHOD_NEITHER, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS)
/*
IOCTL_VFD_QUERY_NUMBER
Get the current device's VFD device number (<n> in "\??\VirtualFD<n>")
Input:
Not used with this operation; set to NULL.
Input Length:
Not used with this operation; set to zero.
Output:
buffer to receive the VFD device number
Output Length:
sizeof(ULONG) or larger
Return:
STATUS_BUFFER_TOO_SMALL buffer length < sizeof(ULONG)
*/
#define IOCTL_VFD_QUERY_NUMBER CTL_CODE( \
IOCTL_DISK_BASE, \
0x80d, \
METHOD_BUFFERED, \
FILE_READ_ACCESS)
/*
IOCTL_VFD_QUERY_NAME
Get the current device's name (\Device\Floppy<n>)
The name is returned in a counted UNICODE string (not NULL terminated)
Input:
Not used with this operation; set to NULL.
Input Length:
Not used with this operation; set to zero.
Output:
buffer to receive the length (USHORT value, number of bytes) followed
by the UNICODE device name.
Output Length:
enough to receive the length and the name
Return:
STATUS_BUFFER_TOO_SMALL buffer length < sizeof(USHORT)
STATUS_BUFFER_OVERFLOW buffer cannot hold the device name.
The first sizeof(USHORT) bytes of the
buffer contains the device name length.
See this value to decide the necessary
buffer length.
*/
#define IOCTL_VFD_QUERY_NAME CTL_CODE( \
IOCTL_DISK_BASE, \
0x80e, \
METHOD_BUFFERED, \
FILE_READ_ACCESS)
/*
IOCTL_VFD_QUERY_VERSION
Get the running VFD driver version
Input:
Not used with this operation; set to NULL.
Input Length:
Not used with this operation; set to zero.
Output:
buffer to receive the VFD version (ULONG value)
High word: major version
Low word: minor version
MSB: debug version flag (1:debug 0:release)
Output Length:
sizeof(ULONG) or larger
Return:
STATUS_BUFFER_TOO_SMALL buffer length < sizeof(ULONG)
*/
#define IOCTL_VFD_QUERY_VERSION CTL_CODE( \
IOCTL_DISK_BASE, \
0x80f, \
METHOD_BUFFERED, \
FILE_READ_ACCESS)
#endif // _VFDIO_H_