[Win32utils-devel] DeviceIoControl + IOCTL_DISK_GET_DRIVE_GEOMETRY problem

Heesob Park phasis at gmail.com
Wed May 7 02:32:42 EDT 2008


2008/5/7 Daniel Berger <djberg96 at gmail.com>:
>
> On Tue, May 6, 2008 at 7:38 PM, Heesob Park <phasis at gmail.com> wrote:
> > Hi,
> >
> >  2008/5/7 Berger, Daniel <Daniel.Berger at qwest.com>:
> >
> >
> > > Hi all,
> >  >
> >  > Ok, what am I doing wrong here?
> >  >
> >  > require 'windows/device_io'
> >  > require 'windows/handle'
> >  > require 'windows/error'
> >  > include Windows::DeviceIO
> >  > include Windows::Handle
> >  > include Windows::Error
> >  >
> >  > fh = File.open('test.txt') # Assume you have this
> >  >
> >  > handle = get_osfhandle(fh.fileno)
> >  >
> >  > if handle == INVALID_HANDLE_VALUE
> >  >   puts "get_osfhandle failed"
> >  >   fh.close
> >  >   exit
> >  > end
> >  >
> >  > buf   = 0.chr * 24 # sizeof(DISK_GEOMETRY)
> >  > bytes = [0].pack('L')
> >  >
> >  > bool = DeviceIoControl(
> >  >   handle,
> >  >   IOCTL_DISK_GET_DRIVE_GEOMETRY(), # 458752
> >  >   nil,
> >  >   0,
> >  >   buf,
> >  >   buf.size,
> >  >   bytes,
> >  >   0
> >  > )
> >  >
> >  > # Fails here
> >  > unless bool
> >  >   puts "DeviceIoControl failed: " + get_last_error
> >  >   fh.close
> >  >   exit
> >  > End
> >  >
> >  > fh.close
> >  >
> >  > Thanks,
> >  >
> >  > Dan
> >  >
> >  > PS - I've added several IOCTL macro methods to Windows::DeviceIO in CVS
> >  > (part of windows-pr).
> >  >
> >  >
> >  What do you want to do?
> >  DeviceIoControl works not with file handle but with device handle.
>
> <snip>
>
> Hm, is there any way to go from file handle to device handle?
>
It is possible but not easy.
Refer to http://msdn.microsoft.com/en-us/library/aa366789.aspx


Regards,

Park Heesob


More information about the win32utils-devel mailing list