Visual C++ 6.0 Undeclared Identifier Error

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • vmagana
    New Member
    • Apr 2008
    • 3

    Visual C++ 6.0 Undeclared Identifier Error

    First of all I would like to indicate that I am a newbie a programming. I am having a problem compiling a sample source code that I downloaded from microsoft. When I try to build the program I get an error that 'STORAGE_PROPER TY_QUERY' undeclared identifier. This structure is defined in the ntddstor.h file and is included. I dont understand why it does not see this structure.

    OS: Windows XP, Visual C++ 6.0, latest SDK and changed the include and library directory order to have the SDK files first in the search order. Any ideas would be appreciated.

    ErrorCode: c:\program files\microsoft visual studio\myprojec ts\programs that work\firstioctl \main.cpp|54|er ror C2065: 'STORAGE_PROPER TY_QUERY' : undeclared identifier|

    Code:
    /* The code of interest is in the subroutine GetDriveGeometry. The
    code in main shows how to interpret the results of the call. */
    
    #include <stdio.h>
    #include <windows.h>
    #include <winioctl.h>
    #include <ntddstor.h>
    
    BOOL GetDriveGeometry(DISK_GEOMETRY *pdg)
    {
      HANDLE hDevice;               // handle to the drive to be examined
      BOOL bResult;                 // results flag
      DWORD junk;                   // discard results
    
    
    
    
    
    
      hDevice = CreateFile(TEXT("\\\\.\\PhysicalDrive1"),  // drive
                        0,                // no access to the drive
                        FILE_SHARE_READ | // share mode
                        FILE_SHARE_WRITE,
                        NULL,             // default security attributes
                        OPEN_EXISTING,    // disposition
                        0,                // file attributes
                        NULL);            // do not copy file attributes
    
      if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
      {
        return (FALSE);
      }
    
      bResult = DeviceIoControl(hDevice,  // device to be queried
          IOCTL_DISK_GET_DRIVE_GEOMETRY,  // operation to perform
                                 NULL, 0, // no input buffer
                                pdg, sizeof(*pdg),     // output buffer
                                &junk,                 // # bytes returned
                                (LPOVERLAPPED) NULL);  // synchronous I/O
    
      CloseHandle(hDevice);
    
      return (bResult);
    }
    
    int main(int argc, char *argv[])
    {
      DISK_GEOMETRY pdg;            // disk drive geometry structure
      BOOL bResult;                 // generic results flag
      ULONGLONG DiskSize;           // size of the drive, in bytes
    
    
    STORAGE_PROPERTY_QUERY              query;
    PSTORAGE_ADAPTER_DESCRIPTOR         adpDesc;
    PSTORAGE_DEVICE_DESCRIPTOR          devDesc;
    SCSI_PASS_THROUGH_WITH_BUFFERS      sptwb;
    
    
    
      bResult = GetDriveGeometry (&pdg);
    
      if (bResult)
      {
        printf("Cylinders = %I64d\n", pdg.Cylinders);
        printf("Tracks/cylinder = %ld\n", (ULONG) pdg.TracksPerCylinder);
        printf("Sectors/track = %ld\n", (ULONG) pdg.SectorsPerTrack);
        printf("Bytes/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 (Gb)\n", DiskSize,
               DiskSize / (1024 * 1024 * 1024));
      }
      else
      {
        printf ("GetDriveGeometry failed. Error %ld.\n", GetLastError ());
      }
    
      return ((int)bResult);
    }
  • gpraghuram
    Recognized Expert Top Contributor
    • Mar 2007
    • 1275

    #2
    The other declarations after STORAGE_PROPERT Y_QUERY that is PSTORAGE_ADAPTE R_DESCRIPTOR is defined in the same header file?
    If it is so check whether you have to include any specific definitions for that.
    Better put the the header file also here so that i can take a look at it

    Thanks
    raghuram

    Comment

    • vmagana
      New Member
      • Apr 2008
      • 3

      #3
      Visual C++ 6.0 Undeclared Error

      Yes, those declarations are in the same "ntddstor.h " file. Except for the SCSI_PASS_THROU GH. I am having problems adding the code. I get an error that says I have to fill out the message and subject field. I attached the header file. Let me know if you have problems viewing the file. Thanks for your help.
      Last edited by vmagana; Apr 18 '08, 05:57 AM. Reason: attached file

      Comment

      • gpraghuram
        Recognized Expert Top Contributor
        • Mar 2007
        • 1275

        #4
        Originally posted by vmagana
        Yes, those declarations are in the same "ntddstor.h " file. Except for the SCSI_PASS_THROU GH. I am having problems adding the code. I get an error that says I have to fill out the message and subject field. I attached the header file. Let me know if you have problems viewing the file. Thanks for your help.

        Can you please post the code instead of attaching the file.

        Raghuram

        Comment

        • Banfa
          Recognized Expert Expert
          • Feb 2006
          • 9067

          #5
          I have removed the attachment, I'm sorry but you may not post the code of ntddstor.h here as it is Copyright to the Microsoft Corporation, we do not allow the posting of copyright code.

          If the file contains the definition (which you can check for yourself) then it is something to do with they way in which it has been included. Please post your code containing your include statements.

          Banfa
          Administrator

          Comment

          • vmagana
            New Member
            • Apr 2008
            • 3

            #6
            Sorry for the copyright code file. The include statements are listed in the code at the beginning of this thread. They are;

            Code:
            #include <stdio.h>
            #include <windows.h>
            #include <winioctl.h>
            #include <ntddstor.h>
            Yes, the ntddstor. h has the definition for the STORAGE_PROPERT Y_QUERY structure. I don't know of another way to include this file. Any recommendations would be appreciated.

            Comment

            Working...