Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394/* 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)#if !defined(__REACTOS__) || defined(_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;
#if !defined(__REACTOS__) || defined(_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_