Python Win32 API question.

yaipa h. yaipa at yahoo.com
Thu Jan 2 13:11:53 EST 2003


Tim,

Many Thanks, friend. 

Regards of the best kind.

Alan Haffner

Tim Roberts <timr at probo.com> wrote in message news:<ack71v4i13bucjdm71ec9j58suog3hn9p2 at 4ax.com>...
> yaipa at yahoo.com (yaipa h.) wrote:
> >
> > Good Cheer and Happy Holidays. In Mark Hammond's win32 toolkit there is
> >a device I/O control method (win32file.DeviceIoControl). Has anyone had
> >a chance to use it? If so could you provide an example of it in action.
> >
> >Also, the parameter 'dwIoControlCode' is said to use an IO control code,
> >but none are listed and this library does not hold to the MFC library's
> >naming convention so no chance on looking it up. :(
> 
> Did you try it?  DeviceIoControl most certainly IS part of the Win32 API,
> as are all of the methods in win32file.  Look it up in MSDN.
> 
> BTW, this has nothing to do with MFC.  It's Win32.
> 
> >Finally, for the big points. Anyone belive that I will be able to use
> >any of the 'IOCTL_*' enumerated values from the MFC toolkit with the 
> >win32file.DeviceIoControl library method?
> 
> Absolutely.  Any ioctl you find in the Win32 include files can be used with
> DeviceIoControl, assuming you can figure out which device to send them to,
> and assuming you expand the macro to get a hex value for the ioctl.  The
> first parameter to DeviceIoControl is the file handle of the driver that
> will handle the ioctl.
> 
> >'IOCTL_DISK_GET_DRIVE_GEOMETRY' Operation
> >-------------------------------------------
> >Returns information about the physical disk's geometry 
> >(media type, number of cylinders, tracks per cylinder, 
> >sectors per track, and bytes per sector).
> 
> That's:
> 
> #define IOCTL_DISK_GET_DRIVE_GEOMETRY   CTL_CODE(IOCTL_DISK_BASE, 0x0000,
> METHOD_BUFFERED, FILE_ANY_ACCESS)
> 
> Which should be 0x00070000.
> 
> >win32file Function Header
> >-------------------------
> >string = DeviceIoControl(hFile, dwIoControlCode , data , readSize , ol )
> >
> >Call DeviceIoControl Parameters
> >-------------------------------
> >hFile           : int
> > # Handle to the file
> >dwIoControlCode : int 
> > # IOControl Code to use.
> >data            : string
> > # The data to write.
> >readSize        : int
> > # Size of the buffer to create for the read.
> >ol=None         : PyOVERLAPPED
> > # An overlapped structure
> 
> So, you'd need to call win32file.CreateFile to open the special file
> \\DISK0 and get a handle.  Then you can call:
> 
> IOCTL_DISK_GET_DRIVE_GEOMETRY = 0x00070000
> handle = ...CreateFile icky details omitted...
> s = DeviceIoControl(handle, IOCTL_DISK_GET_DRIVE_GEOMETRY, 0, 0, 0)
> 
> That ioctl doesn't take any input data, so you don't have to pass anything.
> The information comes back to you in the string, which you will have to
> parse with something like the struct module.




More information about the Python-list mailing list