c++ ÄÚµåÁ» ºÁÁֽǺÐ..

   Á¶È¸ 6223   Ãßõ 0    

#include <iostream>
#include <Windows.h>
#include <tchar.h>
#include <string>
#include <time.h>
#include "RealTimeHDDCheck.h"
using std::cout;
using std::endl;
HANDLE OpenDrive(int iPhysicalDriveNumber)
{
 HANDLE hDevice;
 char vcDriveName[30];

 if(iPhysicalDriveNumber ==0)
 {
   return INVALID_HANDLE_VALUE;
 }
 sprintf(vcDriveName,"\\\\.\\PhysicalDrive%d",iPhysicalDriveNumber);

  hDevice = CreateFile(vcDriveName, GENERIC_READ | GENERIC_WRITE, 
        FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); 
 return hDevice;
}

BOOL ReadSector(HANDLE hDevice,DWORD dwSectorOffset, BYTE* pbBuffer, int iSectorCount)
{
 DWORD dwLow;
 DWORD dwHigh;
 DWORD dwRet;
 DWORD dwRead;
 DWORD dwErrorCode;

 dwLow = (dwSectorOffset << 9);
 dwHigh = ( dwSectorOffset >> 23 );   
    // File Pointer를 이동한다. 
    dwRet = SetFilePointer( hDevice, dwLow,(long *) &dwHigh, FILE_BEGIN ); 
  if( dwRet == INVALID_SET_FILE_POINTER ) 
    { 
        return FALSE; 
    }   
    // Sector를 읽는다. 
    if( ReadFile( hDevice, pbBuffer, iSectorCount * 512, &dwRead,NULL ) == FALSE ) 
    { 
        dwErrorCode = GetLastError(); 
        return FALSE; 
    }   
    return TRUE;
}  


int main()
{
 unsigned char data[512];
 RealTimeHDDCheck c;
 int start=0;
 int stop=0;
 int bad=0;
 int appstart = clock();
 for(int a =0;a<3118684;a++){
  //c.GetDiskList();
  //cout << "------------------" << a << "번째 루프----------------------------" <<endl;

  //Sleep(5000);
  start = clock();
  ReadSector(OpenDrive(1),a,data,1);
  stop = clock();
  //for(int b=0;b < sizeof(data);b++){
  // printf("%d = %c",data[b],data[b]);
 
  //}
  ZeroMemory(data,512);
  if((float)(stop-start)/1000 > 50){
   bad++;
  }
  cout << "진행시간 :" << (clock()-appstart)/1000 << "sec" << "배드카운터 :" << bad << endl;
  cout << "진행량: " << (float)(a*512)/1024 << "MB"<< "/SECTOR" << a << endl;
  system("cls");
  start=0;
  stop = 0;
 }
 
 return 0;
}

 

요렇게 작성을 해봤는데요

 

1번섹터부터 시작해서 끝에 섹터까지 160기가 하드디스크를 가지고 테스트하는데요..

 

작동은 정상적으로 잘하는데 다른툴하고는 결과가 많이 다르네요

 

현재 512바이트씩 1섹터부터 루프를 돌리면서 받아오는건 잘되는데..

 

다른 프로그램에서는 특정섹터를 못읽어온다고 배드섹터로 처리하는데

 

이프로그램에서는 읽어오나봐요. 이상합니다 헬프미~

ªÀº±Û Àϼö·Ï ½ÅÁßÇÏ°Ô.
³Ä¿Ë 2011-12
¸î¹ø ¹Ýº¹À¸·Î Àоî¿Í¼­ °á°ú¸¦ ºñ±³Çؼ­ Ʋ¸®¸é ¹èµå·Î ó¸®Çغ¸¼¼¿ä.
¶Ç´Â Çìµå³ª ´Ù¸¥ ¹°¸®Àû °áÇÔ¾øÀÌ Ç÷¹Æ®¿¡ ¼ÒÀÚ¸¸ ³ª°£ °æ¿ì Àбâ´Â Àß µÉ ¼ö ÀÖ½À´Ï´Ù.
ÀÐÀº ³»¿ëÀ» ºñÆ® ¹ÝÀü ½ÃÄÑ ±â·ÏÇÏ°í ´Ù½Ã Àо ´ëÁ¶Çغ¸¼Å¾ß ÇÒ °Å¿¡¿ä.
º¼·ýÀÌ »ç¿ë ÁßÀÎ °æ¿ì´Â ±â·ÏÇÏ·Á¸é º¼·ý¿¡ ¶ôÀ» °É¾î¾ßÇҰű¸¿ä.
¹ÎÁ¤±â 2011-12
Àú ÄÚµå·Î Àбâ Å×½ºÆ® Çϴ°ɷΠºÁ¼­´Â ¹Ýº¹Çصµ °°Àº°á°ú°¡ ³ª¿Ã²¨ °°±¸¿ä.
¾²±â Å×½ºÆ®µµ ÇØ¾ß µË´Ï´Ù.
À̵¿ÇÒ¼ö ¾ø´Â ÆÄÀÏÀÌ Á¸ÀçÇÏ´Â ¿µ¿ª¿¡ ´ëÇÑ Ã³¸®°¡ ¾î·Á¿ï°Ì´Ï´Ù.

°¡Àå ¾Ë±â ½±°Ô ÇÏ´Â°Ç Çϵåµð½ºÅ© ±¸Á¶¸¦ ÀÌ¿ëÇؼ­ °Ë»çÇÏ´Â ¹æ¹ýÀε¥
ÀÌ´Â 100% ½Å·ÚÇÏ´Â °ªÀ» ÁÖÁö ¸øÇϱ¸¿ä.
¾î·ÆÁö¸¸ Á¦ÀÏ È®½ÇÇÑ°Ç ¾²±â Å×½ºÆ® -> ¾´ ³»¿ëÀ» Àбâ Å×½ºÆ®
ÀÌ°Ç ½Ã°£ÀÌ ¸¹ÀÌ °É¸®Áö¸¸ È®½ÇÇÑ °á°ú¸¦ ÁÙ°Ì´Ï´Ù.

±Ùµ¥ ÀÌ°É C++·Î °ú¿¬ © ¼ö ÀÖÀ»±î ÇÏ´Â Àǹ®ÀÌ Á» µì´Ï´Ù.


QnA
Á¦¸ñPage 3650/5620
2015-12   1198833   ¹é¸Þ°¡
2014-05   4651885   Á¤ÀºÁØ1
2011-12   5960   ¾Æ¸§´Ù¿î³ëÀ»
2011-12   5599   silverwing
2011-12   8677   jake
2011-12   5610   ÃÖ¹ÎÀç
2011-12   5051   ¿Õ¿ëÇÊ
2011-12   6438   ¼Òõ¹éÇâ
2011-12   5810   °øÆÈÀÌ
2011-12   5754   EYESSHOT
2011-12   8815   Ã˼ö¾ö±Ý
2011-12   8719   ÇÑŵ¿
2011-12   6216   ±è°Ç¿ì
2011-12   5709   ÀϹÝÀ¯Àú
2011-12   15611   ÀϹÝÀ¯Àú
2011-12   7698   ÀϹÝÀ¯Àú
2011-12   6677   ¾È¼ºÇö
2011-12   5885   À¯Á¾Ã¶
2011-12   6655   º°Çش¾ÆÇØ
2011-12   5345   ÀÓÁ¾¿­
2011-12   6122   psj1050
2011-12   19930   ÃÖ¿ø½ÃÀÍ