Solved

GET_PARTITION_INFO in Windows NT

Posted on 1997-02-10
1
771 Views
Last Modified: 2013-12-04
I've got a program:
      partitionHandle = CreateFile("\\\\.\\C:",
            0,
            FILE_SHARE_WRITE,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL);
      
      if(partitionHandle == INVALID_HANDLE_VALUE)
      {
            AfxMessageBox("Can't open RAID device",
                  MB_OK, 0);
            return;
      }


      if(!DeviceIoControl(partitionHandle,
            IOCTL_DISK_GET_PARTITION_INFO,
            NULL,
            0,
            &partitionInfo,
            sizeof(PARTITION_INFORMATION),
            &regResult,
            NULL))
      {
            
FormatMessage(
    FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
    raidRoot,
    64,
    NULL);

            
            
            AfxMessageBox("Can't get RAID info",
                  MB_OK, 0);
            CloseHandle(partitionHandle);      
            return;
      }
      
Now what I got in a msg.string is "Access denied".
I've tried to run it as Administrator with same result.
So what's wrong or/and how could I get partition info in
Windows NT?
0
Comment
Question by:ILIIA
1 Comment
 
LVL 11

Accepted Solution

by:
mikeblas earned 50 total points
ID: 1298760
You need to pass GENERIC_READ to CreateFile().

The documentation implies that you can query the device driver by using 0 for the dwDesiredAccess parameter, and that's true.  But the thing is that the disk driver will end up needing to read the physical device to answer your query, so you need to make sure the handle you pass has adequate access.

I think you should use FILE_SHARE_WRITE | FILE_SHARE_READ, by the way, instead of locking the drive for writes.

Finally, your code is leaky: if you successfully read the information, you never close the handle you created.  You need to CloseHandle() wether the DeviceIOControl() call failed or not.

.B ekiM

0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

This article surveys and compares options for encoding and decoding base64 data.  It includes source code in C++ as well as examples of how to use standard Windows API functions for these tasks. We'll look at the algorithms — how encoding and decodi…
For most people, the WrapPanel seems like a magic when they switch from WinForms to WPF. Most of us will think that the code that is used to write a control like that would be difficult. However, most of the work is done by the WPF engine, and the W…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
Here's a very brief overview of the methods PRTG Network Monitor (https://www.paessler.com/prtg) offers for monitoring bandwidth, to help you decide which methods you´d like to investigate in more detail.  The methods are covered in more detail in o…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now