mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
2.9 KiB
127 lines
2.9 KiB
#include <stdio.h>
|
|
#include <windows.h>
|
|
#include <winioctl.h>
|
|
#include <malloc.h>
|
|
|
|
|
|
//
|
|
// main line
|
|
//
|
|
|
|
int _CRTAPI1
|
|
main(int argc, char *argv[])
|
|
{
|
|
HANDLE hFile;
|
|
DWORD numBytes;
|
|
DISK_HISTOGRAM diskHist;
|
|
ULONG i;
|
|
ULONG j;
|
|
ULONG bucket;
|
|
|
|
if (argc < 2) {
|
|
printf("usage: %s <drive>\n",argv[0]);
|
|
return 0;
|
|
}
|
|
|
|
//
|
|
// Create File Handle
|
|
//
|
|
|
|
hFile = CreateFile(argv[1],
|
|
GENERIC_READ,
|
|
0,
|
|
NULL,
|
|
OPEN_EXISTING,
|
|
0,
|
|
NULL);
|
|
|
|
//
|
|
// Check to see that the File Handle is Valid
|
|
//
|
|
|
|
if (hFile == INVALID_HANDLE_VALUE) {
|
|
printf("BLOCKED: CreatFile() Failed %s [Error %d]\n",
|
|
argv[1],
|
|
GetLastError());
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// Get the Disk Performance Structure
|
|
//
|
|
|
|
if (!DeviceIoControl(hFile,
|
|
IOCTL_DISK_HISTOGRAM,
|
|
NULL,
|
|
0,
|
|
&diskHist,
|
|
sizeof(diskHist),
|
|
&numBytes,
|
|
NULL)) {
|
|
printf("Unable to get drive performance [Error %d].\n",
|
|
GetLastError());
|
|
CloseHandle(hFile);
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
printf("Disk Performance Histogram Structure for \"%s\"\n", argv[1]);
|
|
printf("\tGranularity:\t%ld\n",diskHist.Granularity);
|
|
printf("\tDiskSize:\t%d(MB)\n",(diskHist.DiskSize.QuadPart / (1024 * 1024)));
|
|
printf("\tSize:\t\t%ld\n",diskHist.Size);
|
|
printf("\tReadCount:\t%ld\n",diskHist.ReadCount);
|
|
printf("\tWriteCount:\t%ld\n",diskHist.WriteCount);
|
|
|
|
|
|
//
|
|
// Reset the numbers
|
|
//
|
|
|
|
if (!DeviceIoControl(hFile,
|
|
IOCTL_DISK_HISTOGRAM_RESET,
|
|
NULL,
|
|
0,
|
|
&diskHist,
|
|
sizeof(diskHist),
|
|
&numBytes,
|
|
NULL)) {
|
|
|
|
printf("Unable to rest the histogram [error %d].\n",
|
|
GetLastError());
|
|
CloseHandle(hFile);
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// Get the Disk Performance Structure
|
|
//
|
|
|
|
if (!DeviceIoControl(hFile,
|
|
IOCTL_DISK_HISTOGRAM,
|
|
NULL,
|
|
0,
|
|
&diskHist,
|
|
sizeof(diskHist),
|
|
&numBytes,
|
|
NULL)) {
|
|
printf("Unable to get drive performance [Error %d].\n",
|
|
GetLastError());
|
|
CloseHandle(hFile);
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
printf("Disk Performance Histogram Structure for \"%s\"\n", argv[1]);
|
|
printf("\tGranularity:\t%ld\n",diskHist.Granularity);
|
|
printf("\tDiskSize:\t%d(MB)\n",(diskHist.DiskSize.QuadPart / (1024 * 1024)));
|
|
printf("\tSize:\t\t%ld\n",diskHist.Size);
|
|
printf("\tReadCount:\t%ld\n",diskHist.ReadCount);
|
|
printf("\tWriteCount:\t%ld\n",diskHist.WriteCount);
|
|
|
|
//
|
|
// Exit Cleanly
|
|
//
|
|
|
|
CloseHandle(hFile);
|
|
return TRUE;
|
|
}
|