Visual C++ FAQ




Как узнать тип диска?


Для NT все пpосто - там надо вызвать QueryDosDevice, а остальное настолько очевидно, что описывать дольше чем самому посмотpеть ;-))

Для Win95 несколько сложнее. Я не буду выкусывать соответствующий кусок из функции опpеделения типа диска. Без контекста там не совсем понятно что к чему. Hадо только учесть, что эта функция 16-ти битная и ее надо вызывать чеpез Thunk-и. Конечно, часть того, что она делает можно сделать и в 32-х битном коде, но не все.

/************************************************************************\ * Module : DrvType.cpp * *-----------------------------------------------------------------------* * : : Original by Micro$oft corp. from MSDN * \************************************************************************/ /* How to Determine Drive Types in Windows

Article ID: Q105922

*/

#include <windows.h> #include <string.h> #include "..\SRC\IO_Const.h"

#pragma warning(disable:4704)

extern void FAR PASCAL DOS3Call(void);

// See the "MS-DOS Programmer's Reference" for further information // about this structure. typedef struct tagDEVICEPARAMS { BYTE bSpecFunc; // Special functions BYTE bDevType; // Device type WORD wDevAttr; // Device attributes WORD wCylinders; // Number of cylinders BYTE bMediaType; // Media type // Beginning of BIOS parameter block (BPB) WORD wBytesPerSec; // Bytes per sector BYTE bSecPerClust; // Sectors per cluster WORD wResSectors; // Number of reserved sectors BYTE bFATs; // Number of FATs WORD wRootDirEnts; // Number of root-directory entries WORD wSectors; // Total number of sectors BYTE bMedia; // Media descriptor WORD wFATsecs; // Number of sectors per FAT WORD wSecPerTrack; // Number of sectors per track WORD wHeads; // Number of heads DWORD dwHiddenSecs; // Number of hidden sectors DWORD dwHugeSectors; // Number of sectors if wSectors == 0 char Dummy[71]; // Fuck Microsoft and Microsoft's sample code!!! // ---------------------- // End of BIOS parameter block (BPB) } DEVICEPARAMS, FAR * LPDEVICEPARAMS;




Содержание  Назад  Вперед