Mailing-List: contact cygwin-help AT sourceware DOT cygnus DOT com; run by ezmlm Sender: cygwin-owner AT sourceware DOT cygnus DOT com Delivered-To: mailing list cygwin AT sourceware DOT cygnus DOT com Message-ID: <001901be747a$0380d700$0f0a0181@devel014> From: "Nirmal Prasad" To: Cc: Subject: Re: Reading physical disks. Date: Mon, 22 Mar 1999 10:38:17 -0500 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_NextPart_000_0016_01BE7450.190FBCA0" X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 4.72.3110.5 X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3 ------=_NextPart_000_0016_01BE7450.190FBCA0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable >> Pls. refer documentation of DevIoControl(..) =20 >Coud you please point me where can I find the documentation about this = API.I am=20 >quite a newbie as to Windows programming. hi, u can find info about the api in SDK documentation , if u have msdev u = can look up that api call and it lists all the control parameters. but = anyway i am sending u the information. I havent tried doing any = low-level device specific stuff so i cannot send u any example (sorry = about that) :- BOOL DeviceIoControl( HANDLE hDevice, // handle to device of interest DWORD dwIoControlCode, // control code of operation to perform LPVOID lpInBuffer, // pointer to buffer to supply input data DWORD nInBufferSize, // size, in bytes, of input buffer LPVOID lpOutBuffer, // pointer to buffer to receive output = data DWORD nOutBufferSize, // size, in bytes, of output buffer LPDWORD lpBytesReturned, // pointer to variable to receive byte = count LPOVERLAPPED lpOverlapped // pointer to structure for asynchronous = operation ); =20 Parameters hDevice=20 Handle to the device that is to perform the operation. Call the = CreateFile function to obtain a device handle.=20 dwIoControlCode=20 Specifies the control code for the operation. This value identifies = the specific operation to be performed and the type of device on which = the operation is to be performed. The following values are defined: = Value Meaning=20 FSCTL_ALLOW_EXTENDED_DASD_IO Signals the file system = driver not to perform any I/O boundary checks on partition read or write = calls. Instead, boundary checks are performed by the device driver. =20 FSCTL_DELETE_REPARSE_POINT Deletes a reparse point for a = file or directory.=20 FSCTL_DISMOUNT_VOLUME Dismounts a volume.=20 FSCTL_ENABLE_UPGRADE Enables or disables upgrading an = NTFS volume to NTFS version 5.=20 FSCTL_GET_COMPRESSION Obtains the compression state of a = file or directory=20 FSCTL_GET_HFS_INFORMATION Returns Macintosh Finder = information about the file associated with the input handle. =20 FSCTL_GET_REPARSE_POINT Returns reparse point data for a = file or directory.=20 FSCTL_LOCK_VOLUME Locks a volume.=20 FSCTL_QUERY_ALLOCATED_RANGES Scans a file for ranges of = the file for which disk space is allocated.=20 FSCTL_QUERY_FAT_BPB Returns the first 36 bytes of a = FAT16 or FAT12 volume.=20 FSCTL_READ_COMPRESSION Reserved for future use.=20 FSCTL_SET_COMPRESSION Sets the compression state of a = file or directory.=20 FSCTL_SET_REPARSE_POINT Sets a reparse point on a file = or directory.=20 FSCTL_SET_SPARSE Marks a file as a sparse file.=20 FSCTL_SET_ZERO_DATA Sets a range of a files bytes to = zeroes.=20 FSCTL_UNLOCK_VOLUME Unlocks a volume.=20 FSCTL_WRITE_COMPRESSION Reserved for future use.=20 IOCTL_DISK_CHECK_VERIFY Obsolete. Use = IOCTL_STORAGE_CHECK_VERIFY=20 IOCTL_DISK_EJECT_MEDIA Obsolete. Use = IOCTL_STORAGE_EJECT_MEDIA=20 IOCTL_DISK_FORMAT_TRACKS Formats a contiguous set of = disk tracks.=20 IOCTL_DISK_GET_DRIVE_GEOMETRY Obtains information on the = physical disk's geometry.=20 IOCTL_DISK_GET_DRIVE_LAYOUT Provides information about = each partition on a disk.=20 IOCTL_DISK_GET_MEDIA_TYPES Obsolete. Use = IOCTL_STORAGE_GET_MEDIA_TYPES=20 IOCTL_DISK_GET_PARTITION_INFO Obtains disk partition = information.=20 IOCTL_DISK_LOAD_MEDIA Obsolete. Use = IOCTL_STORAGE_LOAD_MEDIA=20 IOCTL_DISK_MEDIA_REMOVAL Obsolete. Use = IOCTL_STORAGE_MEDIA_REMOVAL=20 IOCTL_DISK_PERFORMANCE Provides disk performance = information.=20 IOCTL_DISK_REASSIGN_BLOCKS Maps disk blocks to = spare-block pool.=20 IOCTL_DISK_SET_DRIVE_LAYOUT Partitions a disk.=20 IOCTL_DISK_SET_PARTITION_INFO Sets the disk partition = type.=20 IOCTL_DISK_VERIFY Performs logical format of a disk = extent.=20 IOCTL_SERIAL_LSRMST_INSERT Enables or disables placement = of a line and modem status data into the data stream.=20 IOCTL_STORAGE_CHECK_VERIFY Checks for change in a = removable-media device.=20 IOCTL_STORAGE_EJECT_MEDIA Ejects media from a SCSI = device.=20 IOCTL_STORAGE_GET_MEDIA_TYPES Obtains information about = media support.=20 IOCTL_STORAGE_LOAD_MEDIA Loads media into a device.=20 IOCTL_STORAGE_MEDIA_REMOVAL Enables or disables the = media eject mechanism.=20 =20 =20 For more detailed information on each control code, see its topic. = In particular, each topic provides details on the usage of the = lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, and = lpBytesReturned parameters.=20 lpInBuffer=20 Pointer to a buffer that contains the data required to perform the = operation.=20 This parameter can be NULL if the dwIoControlCode parameter = specifies an operation that does not require input data.=20 nInBufferSize=20 Size, in bytes, of the buffer pointed to by lpInBuffer.=20 lpOutBuffer=20 Pointer to a buffer that receives the operation's output data.=20 This parameter can be NULL if the dwIoControlCode parameter = specifies an operation that does not produce output data.=20 nOutBufferSize=20 Size, in bytes, of the buffer pointed to by lpOutBuffer.=20 lpBytesReturned=20 Pointer to a variable that receives the size, in bytes, of the data = stored into the buffer pointed to by lpOutBuffer.=20 If lpOverlapped is NULL, lpBytesReturned cannot be NULL. Even when = an operation produces no output data, and lpOutBuffer can be NULL, the = DeviceIoControl function makes use of the variable pointed to by = lpBytesReturned. After such an operation, the value of the variable is = without meaning.=20 If lpOverlapped is not NULL, lpBytesReturned can be NULL. If this is = an overlapped operation, you can get the number of bytes returned by = calling GetOverlappedResult. If hDevice is associated with an I/O = completion port, you can get the number of bytes returned by calling = GetQueuedCompletionStatus.=20 lpOverlapped=20 Pointer to an OVERLAPPED structure.=20 If hDevice was opened with the FILE_FLAG_OVERLAPPED flag, this = parameter must point to a valid OVERLAPPED structure. In this case, = DeviceIoControl is performed as an overlapped (asynchronous) operation. = If the device was opened with FILE_FLAG_OVERLAPPED and lpOverlapped is = NULL, the function fails in unpredictable ways.=20 If hDevice was opened without specifying the FILE_FLAG_OVERLAPPED = flag, this parameter is ignored and the DeviceIoControl function does = not return until the operation has been completed, or an error occurs.=20 Return Values If the function succeeds, the return value is nonzero. If the function fails, the return value is zero. To get extended error = information, call GetLastError.=20 Remarks If hDevice was opened with FILE_FLAG_OVERLAPPED and the lpOverlapped = parameter points to an OVERLAPPED structure, DeviceIoControl is = performed as an overlapped (asynchronous) operation. In this case, the = OVERLAPPED structure must contain a handle to a manual-reset event = object created by a call to the CreateEvent function. For more = information on manual-reset event objects, see Synchronization.=20 Windows CE: No specific values are defined for the dwIoControlCode = parameter. However, the writer of a custom device driver can define = IOCTL_XXXX control codes, per the CTL_CODE macro. These control codes = can then be advertised, and an application can use these control codes = with DeviceIoControl to perform the driver-specific functions.=20 The lpOverlapped parameter is ignored and should be NULL. QuickInfo Windows NT: Requires version 3.1 or later. Windows: Requires Windows 95 or later. Windows CE: Requires version 1.0 or later. Header: Declared in winbase.h. Import Library: Use kernel32.lib. hope this will be of some help to u Regards=20 Nirmal Prasad R. ------=_NextPart_000_0016_01BE7450.190FBCA0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable

>> Pls. refer documentation of DevIoControl(..)  =
>Coud you please point me where can I find the documentation = about this=20 API.I am
>quite a newbie as to Windows programming.
hi,
 
u can find info about the api in SDK documentation , if u have = msdev u can=20 look up that api call and it lists all the control parameters. but = anyway i am=20 sending u the information. I havent tried doing any low-level device = specific=20 stuff so i cannot send u any example (sorry about that) :-
 
BOOL DeviceIoControl(
  HANDLE hDevice,              // handle to device of =
interest
  DWORD dwIoControlCode,       // control code of =
operation to perform
  LPVOID lpInBuffer,           // pointer to buffer =
to supply input data
  DWORD nInBufferSize,         // size, in bytes, =
of input buffer
  LPVOID lpOutBuffer,          // pointer to buffer =
to receive output data
  DWORD nOutBufferSize,        // size, in bytes, =
of output buffer
  LPDWORD lpBytesReturned,     // pointer to =
variable to receive byte count
  LPOVERLAPPED lpOverlapped    // pointer to structure for =
asynchronous operation
);
 

Parameters

hDevice=20
Handle to the device that is to perform the operation. Call the = CreateFile=20 function to obtain a device handle.=20
dwIoControlCode=20
Specifies the control code for the operation. This value = identifies the=20 specific operation to be performed and the type of device on which = the=20 operation is to be performed. The following values are defined:=20
Value Meaning
FSCTL_ALLOW_EXTENDED_DASD_IO Signals the file system driver not to = perform any=20 I/O boundary checks on partition read or write calls. = Instead,=20 boundary checks are performed by the device driver. =
FSCTL_DELETE_REPARSE_POINT Deletes a reparse point for a file or = directory.
FSCTL_DISMOUNT_VOLUME Dismounts a volume.
FSCTL_ENABLE_UPGRADE=20 Enables or disables upgrading an NTFS volume = to=20 NTFS version 5.
FSCTL_GET_COMPRESSION Obtains the compression state of a file or=20 directory
FSCTL_GET_HFS_INFORMATION Returns Macintosh Finder information about = the=20 file associated with the input handle.
FSCTL_GET_REPARSE_POINT Returns reparse point data for a file or=20 directory.
FSCTL_LOCK_VOLUME Locks a volume.
FSCTL_QUERY_ALLOCATED_RANGES Scans a file for ranges of the file for = which disk=20 space is allocated.
FSCTL_QUERY_FAT_BPB Returns the first 36 bytes of a FAT16 or = FAT12=20 volume.
FSCTL_READ_COMPRESSION Reserved for future use.
FSCTL_SET_COMPRESSION Sets the compression state of a file or=20 directory.
FSCTL_SET_REPARSE_POINT Sets a reparse point on a file or = directory.
FSCTL_SET_SPARSE Marks a file as a sparse file.
FSCTL_SET_ZERO_DATA Sets a range of a files bytes to = zeroes.
FSCTL_UNLOCK_VOLUME Unlocks a volume.
FSCTL_WRITE_COMPRESSION Reserved for future use.
IOCTL_DISK_CHECK_VERIFY Obsolete. Use = IOCTL_STORAGE_CHECK_VERIFY
IOCTL_DISK_EJECT_MEDIA Obsolete. Use = IOCTL_STORAGE_EJECT_MEDIA
IOCTL_DISK_FORMAT_TRACKS Formats a contiguous set of disk = tracks.
IOCTL_DISK_GET_DRIVE_GEOMETRY Obtains information on the physical disk's=20 geometry.
IOCTL_DISK_GET_DRIVE_LAYOUT Provides information about each partition on = a=20 disk.
IOCTL_DISK_GET_MEDIA_TYPES Obsolete. Use = IOCTL_STORAGE_GET_MEDIA_TYPES
IOCTL_DISK_GET_PARTITION_INFO Obtains disk partition = information.
IOCTL_DISK_LOAD_MEDIA Obsolete. Use = IOCTL_STORAGE_LOAD_MEDIA
IOCTL_DISK_MEDIA_REMOVAL Obsolete. Use = IOCTL_STORAGE_MEDIA_REMOVAL
IOCTL_DISK_PERFORMANCE Provides disk performance = information.
IOCTL_DISK_REASSIGN_BLOCKS Maps disk blocks to spare-block = pool.
IOCTL_DISK_SET_DRIVE_LAYOUT Partitions a disk.
IOCTL_DISK_SET_PARTITION_INFO Sets the disk partition type.
IOCTL_DISK_VERIFY Performs logical format of a disk = extent.
IOCTL_SERIAL_LSRMST_INSERT Enables or disables placement of a line and = modem=20 status data into the data stream.
IOCTL_STORAGE_CHECK_VERIFY Checks for change in a removable-media = device.
IOCTL_STORAGE_EJECT_MEDIA Ejects media from a SCSI device.
IOCTL_STORAGE_GET_MEDIA_TYPES Obtains information about media = support.
IOCTL_STORAGE_LOAD_MEDIA Loads media into a device.
IOCTL_STORAGE_MEDIA_REMOVAL Enables or disables the media eject=20 mechanism.

For more detailed information on each control code, see its = topic. In=20 particular, each topic provides details on the usage of the=20 lpInBuffer, nInBufferSize, lpOutBuffer,=20 nOutBufferSize, and lpBytesReturned parameters.

lpInBuffer=20
Pointer to a buffer that contains the data required to perform = the=20 operation.=20

This parameter can be NULL if the dwIoControlCode = parameter=20 specifies an operation that does not require input data.

nInBufferSize=20
Size, in bytes, of the buffer pointed to by lpInBuffer.=20
lpOutBuffer=20
Pointer to a buffer that receives the operation's output data.=20

This parameter can be NULL if the dwIoControlCode = parameter=20 specifies an operation that does not produce output data.

nOutBufferSize=20
Size, in bytes, of the buffer pointed to by lpOutBuffer.=20
lpBytesReturned=20
Pointer to a variable that receives the size, in bytes, of the = data=20 stored into the buffer pointed to by lpOutBuffer.=20

If lpOverlapped is NULL, lpBytesReturned cannot be = NULL.=20 Even when an operation produces no output data, and = lpOutBuffer can=20 be NULL, the DeviceIoControl function makes use of the = variable=20 pointed to by lpBytesReturned. After such an operation, the = value of=20 the variable is without meaning.=20

If lpOverlapped is not NULL, lpBytesReturned can be = NULL.=20 If this is an overlapped operation, you can get the number of bytes = returned=20 by calling GetOverlappedResult.=20 If hDevice is associated with an I/O completion port, you can = get the=20 number of bytes returned by calling GetQueuedCompletionStatus.=20

lpOverlapped=20
Pointer to an OVERLAPPED=20 structure.=20

If hDevice was opened with the FILE_FLAG_OVERLAPPED flag, = this=20 parameter must point to a valid OVERLAPPED structure. In this = case,=20 DeviceIoControl is performed as an overlapped (asynchronous)=20 operation. If the device was opened with FILE_FLAG_OVERLAPPED and=20 lpOverlapped is NULL, the function fails in unpredictable = ways.=20

If hDevice was opened without specifying the = FILE_FLAG_OVERLAPPED=20 flag, this parameter is ignored and the DeviceIoControl = function does=20 not return until the operation has been completed, or an error = occurs.=20

Return Values

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended = error=20 information, call GetLastError.=20

Remarks

If hDevice was opened with FILE_FLAG_OVERLAPPED and the=20 lpOverlapped parameter points to an OVERLAPPED structure,=20 DeviceIoControl is performed as an overlapped (asynchronous) = operation.=20 In this case, the OVERLAPPED structure must contain a handle to a = manual-reset event object created by a call to the CreateEvent = function.=20 For more information on manual-reset event objects, see Synchronization.=20

Windows CE: No specific values are defined for the = dwIoControlCode=20 parameter. However, the writer of a custom device driver can define=20 IOCTL_XXXX control codes, per the CTL_CODE macro. These control = codes can=20 then be advertised, and an application can use these control codes with=20 DeviceIoControl to perform the driver-specific functions.

The lpOverlapped parameter is ignored and should be NULL.

QuickInfo

  Windows NT: Requires version 3.1 or later.
  = Windows: Requires Windows 95 or later.
  Windows CE: = Requires=20 version 1.0 or later.
  Header: Declared in=20 winbase.h.
  Import Library: Use kernel32.lib.

 

hope this will be of some help to u

 

Regards

 

Nirmal Prasad R.

------=_NextPart_000_0016_01BE7450.190FBCA0 Content-Type: text/plain; charset=us-ascii -- Want to unsubscribe from this list? Send a message to cygwin-unsubscribe AT sourceware DOT cygnus DOT com ------=_NextPart_000_0016_01BE7450.190FBCA0--