[Win32utils-devel] DeviceIoControl + IOCTL_DISK_GET_DRIVE_GEOMETRY problem

Daniel Berger djberg96 at gmail.com
Wed May 7 08:06:58 EDT 2008


On Wed, May 7, 2008 at 12:32 AM, Heesob Park <phasis at gmail.com> wrote:
> 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

Yes, I saw that. I was hoping to avoid it. I thought maybe there was
an easier way somewhere.

Thanks,

Dan


More information about the win32utils-devel mailing list