📄 testa.cpp
字号:
// testa.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <IOSTREAM>
#include <winioctl.h>
#include "imb_if.h"
using namespace std;
BOOL
GetDriveGeometry(DISK_GEOMETRY *pdg)
{
HANDLE hDevice; // handle to the drive to be examined
BOOL bResult; // results flag
DWORD junk; // discard results
BYTE pby[20] = {0x18,0x22,0x18,0x22,0x18,0x22,0x18,0x22,0x18,0x22,0x18,0x22,0x18,0x22,0x18,0x22,0x18,0x22,0x18,0x22};
BYTE pbyOut[20] = {0};
hDevice = CreateFile(
"\\\\.\\Imb", // drive to open
0, // don't need any access to the drive
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // don't copy any file's attributes
if (hDevice == INVALID_HANDLE_VALUE) // we can't open the drive
{
cout<<"error1!"<<hDevice<<endl;
return (FALSE);
}
bResult = DeviceIoControl(
hDevice, // device we are querying
IOCTL_IMB_SEND_MESSAGE, // operation to perform
pby,
20, // no input buffer, so pass zero
pbyOut,
10, // output buffer
&junk, // discard count of bytes returned
(LPOVERLAPPED) NULL
); // synchronous I/O
if (!bResult) // IOCTL failed
{
cout<<"error2!"<<bResult<<endl;
return (FALSE);
}
CloseHandle(hDevice); // we're done with the handle
return (bResult);
}
int
main(int argc, char *argv[])
{
DISK_GEOMETRY pdg; // disk drive geometry structure
BOOL bResult; // generic results flag
ULONGLONG DiskSize; // holder for the size of the drive in bytes
bResult = GetDriveGeometry (&pdg);
if (bResult)
{
printf("Cylinders = %I64d\n", pdg.Cylinders);
printf("Tracks per cylinder = %ld\n", (ULONG) pdg.TracksPerCylinder);
printf("Sectors per track = %ld\n", (ULONG) pdg.SectorsPerTrack);
printf("Bytes per sector = %ld\n", (ULONG) pdg.BytesPerSector);
DiskSize = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder *
(ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector;
printf("Disk size = %I64d (Bytes) = %I64d (Mb)\n", DiskSize,
DiskSize / (1024 * 1024));
} else {
printf ("Attempt to get drive geometry failed. Error %ld.\n",
GetLastError ());
}
return ((int)bResult);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -