我想实现如下功能:
1)当前的分区是第几个磁盘第几个分区,比方如果只有一个磁盘,
  则d:应该是第二个分区;
2)把一个文件写入硬盘的绝对地址,比方MBR后512个字节;
应该怎么办?希望大家多指点.

解决方案 »

  1.   

    希望能给出需要用到的API,以及参数说明.
      

  2.   

    1.例子如下:
    HANDLE hDevice;
    DWORD bytesReturned;
    char rawDiskName[] = "\\\\.\\C:";
    hDevice = CreateFile(rawDiskName, GENERIC_READ,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL, OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL, NULL);if (hDevice == INVALID_HANDLE_VALUE) return FALSE;STORAGE_DEVICE_NUMBER deviceInfo;
    BOOL retcode=DeviceIoControl(hDevice, 
    IOCTL_STORAGE_GET_DEVICE_NUMBER,
    NULL,
    0, 
    &deviceInfo, 
    sizeof(deviceInfo),
    &bytesReturned,
    NULL);if(retcode==FALSE)
    {
    CloseHandle(hDevice);
    return FALSE;
    }*diskNumberPtr = deviceInfo.DeviceNumber;  //c PARTITION BELONG TO WHICH DISK
    2.读写硬盘api:
    HANDLE CreateFile(
      LPCTSTR lpFileName,
      DWORD dwDesiredAccess,
      DWORD dwShareMode,
      LPSECURITY_ATTRIBUTES lpSecurityAttributes,
      DWORD dwCreationDisposition,
      DWORD dwFlagsAndAttributes,
      HANDLE hTemplateFile
    );DWORD SetFilePointer(
      HANDLE hFile,
      LONG lDistanceToMove,
      PLONG lpDistanceToMoveHigh,
      DWORD dwMoveMethod
    );BOOL ReadFile(
      HANDLE hFile,
      LPVOID lpBuffer,
      DWORD nNumberOfBytesToRead,
      LPDWORD lpNumberOfBytesRead,
      LPOVERLAPPED lpOverlapped
    );BOOL WriteFile(
      HANDLE hFile,
      LPCVOID lpBuffer,
      DWORD nNumberOfBytesToWrite,
      LPDWORD lpNumberOfBytesWritten,
      LPOVERLAPPED lpOverlapped
    );
    //你的要求可以这样写,前提是你把文件内容已经放到了buffer里。
    int bufferlen=100,
        writed = 0;
    HANDLE hDev = CreateFile("\\\\.\\PHYSICALDRIVE0",GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,
    NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);//打开物理硬盘0
    SetFilePointer(hDev,512,NULL,FILE_BEGIN);//移动到需要写的位置
    WriteFile(hDev,buffer,bufferlen,&writed,NULL);//写buffer中的数据到物理硬盘
    CloseHandle(hDev);//关闭不能用在win9x下。