2014-02-08 11 views

답변

5

플랫폼에 따라 다릅니다 예를 들어 다음 코드 (당신은 권한이있는 경우 그것을 할)

#include <windows.h> 
#include <stdio.h> 
#include <iostream> 
using namespace std; 
short ReadSect 
     (const char *_dsk, // disk to access 
     char *&_buff,   // buffer where sector will be stored 
     unsigned int _nsect // sector number, starting with 0 
     ) 
{ 
    DWORD dwRead; 
    HANDLE hDisk=CreateFile(_dsk,GENERIC_READ,FILE_SHARE_VALID_FLAGS,0,OPEN_EXISTING,0,0); 
    if(hDisk==INVALID_HANDLE_VALUE) // this may happen if another program is already reading from disk 
    { 
     CloseHandle(hDisk); 
     return 1; 
    } 
    SetFilePointer(hDisk,_nsect*512,0,FILE_BEGIN); // which sector to read 

    ReadFile(hDisk,_buff,512,&dwRead,0); // read sector 
    CloseHandle(hDisk); 
    return 0; 
} 

int main() 
{ 
    char * drv="\\\\.\\C:"; 
    char *dsk="\\\\.\\PhysicalDrive0"; 
    int sector=0; 

    char *buff=new char[512]; 
    ReadSect(dsk,buff,sector); 
    if((unsigned char)buff[510]==0x55 && (unsigned char)buff[511]==0xaa) cout <<"Disk is bootable!"<<endl; 


    getchar(); 

} 

http://www.cplusplus.com/forum/windows/18019/

리눅스에 당신도 사용할 수있는 윈도우에서 작동 터미널 명령

sudo dd if=/dev/sda ibs=512 count=1 | hexdump -C 

최상의 해결 방법은 코드 #ifdef이며 플랫폼에 따라 달라집니다.

5

아니요, MBR을 읽는 것은 플랫폼 의존적입니다. 하드 디스크가 두 개 이상인 경우 "MBR"이 무엇인지 묻습니다. 코드에서 플랫폼 종속적 인 것을 숨기는 라이브러리가 가장 좋을 수도 있지만, 아마도 직접 작성해야 할 것입니다. 마스터 부트 레코드를 읽기

3

일반적으로 전체 디스크 내용에 대한 파일 핸들을 얻으려면 플랫폼 별 단계를 수행해야하며, 해당 파일을 사용하여 MBR을 조작하는 것은 상대적으로 플랫폼에 구애받지 않습니다.

Guntram에서 언급 한 것처럼 원하는 하드 드라이브를 식별 할 필요가있을뿐만 아니라 많은 플랫폼에서 디스크에 대한 쓰기 액세스 권한을 얻기 전에 해당 드라이브에서 모든 파일 시스템을 마운트 해제해야합니다. 이것은 심지어 당신의 목표를 배제 할 수도 있습니다.

0

나는 이유가 무엇입니까?

POSIX가 장착 또는 블록 장치 (리눅스 특정)의 개념이 혼자하지 않습니다 ANSI C.