Геометрия дисков
От: Roman_M rgmroman.narod.ru
Дата: 20.03.03 08:49
Оценка:
Как в Win9X определять геометрию дисков ? Нужны данные аналогичные DISK_GEOMETRY в WinNT. Нужно это для создания имиджей дисков.

21.03.03 10:12: Перенесено модератором из 'WIN API' в Исходники — ХД
Re: Геометрия дисков
От: payglobal  
Дата: 20.03.03 09:11
Оценка:
Здравствуйте, Roman_M, Вы писали:

RM>Как в Win9X определять геометрию дисков ? Нужны данные аналогичные DISK_GEOMETRY в WinNT. Нужно это для создания имиджей дисков.


Могу мылом выслать — слишком большой кусок кода
... << RSDN@Home 1.0 beta 6a >>
Re: Геометрия дисков
От: Saddam Россия http://saddam.narod.ru
Дата: 20.03.03 09:12
Оценка:
Здравствуйте, Roman_M, Вы писали:

RM>Как в Win9X определять геометрию дисков ? Нужны данные аналогичные DISK_GEOMETRY в WinNT. Нужно это для создания имиджей дисков.

Ищи в этом напралении:
HANDLE hSMARTIOCTL;
    OSVERSIONINFO osvi;
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
    GetVersionEx (&osvi);
    hSMARTIOCTL=INVALID_HANDLE_VALUE;
    if (osvi.dwPlatformId==VER_PLATFORM_WIN32_NT)
    {
        hSMARTIOCTL = CreateFile("\\\\.\\PhysicalDrive0",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
        //hSMARTIOCTL = CreateFile("\\\\.\\Scsi2:",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
        ReportError ();
    }
    if (osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
    {
        hSMARTIOCTL = CreateFile("c:\\asedtr.tmp", 0,0,0,CREATE_NEW, 0, 0);//\\\\.\\SMARTVSD
    }
        
    if (hSMARTIOCTL!=INVALID_HANDLE_VALUE)
    {
        AfxMessageBox("Handle valid");
        DWORD Returned;
        GETVERSIONOUTPARAMS VersionParams;
        memset((void*)&VersionParams, 0, sizeof(VersionParams));
        DeviceIoControl(hSMARTIOCTL, DFP_GET_VERSION,NULL,0,&VersionParams,    sizeof(VersionParams),&Returned, NULL);
        byte Cmd=(VersionParams.fCapabilities&1 == 1)?IDE_ID_FUNCTION:IDE_ATAPI_ID ;
        SENDCMDINPARAMS scip;
        memset(&scip, 0, sizeof(scip));
        memset(IdOutCmd, 0, sizeof(IdOutCmd));
        DoIDENTIFY(hSMARTIOCTL,&scip,(PSENDCMDOUTPARAMS)&IdOutCmd,Cmd,0,&Returned);
        PIDSECTOR S=(PIDSECTOR)((PSENDCMDOUTPARAMS)IdOutCmd)->bBuffer;
        CString Tmp; char Buf[1024];
        ChangeByteOrder(S->sModelNumber,sizeof S->sModelNumber);
        memset (Buf,0,1024);
        strncpy(Buf, S->sModelNumber, sizeof(S->sModelNumber));
        Tmp.Format("Model      %s",Buf);
        m_Hdd0.AddString(Tmp);
        ChangeByteOrder(S->sFirmwareRev,sizeof S->sFirmwareRev);
        memset (Buf,0,1024);
        strncpy(Buf, S->sFirmwareRev, sizeof(S->sFirmwareRev));
        Tmp.Format("Firmware   %s",Buf);
        m_Hdd0.AddString(Tmp);
        ChangeByteOrder(S->sSerialNumber,sizeof S->sSerialNumber);
        memset (Buf,0,1024);
        strncpy(Buf, S->sSerialNumber, sizeof(S->sSerialNumber));
        Tmp.Format("Serial ╣   %s",Buf);
        m_Hdd0.AddString(Tmp);
        UpdateData (FALSE);
        CloseHandle(hSMARTIOCTL);
        if (osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
        {
            
            DeleteFile("c:\\asedtr.tmp");
        }
        
    }
    char Drives[1024];
    GetLogicalDriveStrings( 1024,Drives);
    char CurDrive[4];
    int CurIdx=0,TmpIdx;
    while (true)
    {
        TmpIdx=0;
        while ((Drives[CurIdx]!=0))
        {
            CurDrive[TmpIdx]=Drives[CurIdx];
            TmpIdx++; CurIdx++;
        }
        CurDrive[TmpIdx]=Drives[CurIdx];
        if (::GetDriveType(CurDrive)==DRIVE_FIXED)
        {
            char VolumeName[256],FS[128];
            DWORD Serial,MaxLength,Flags;
            ::GetVolumeInformation(CurDrive,VolumeName,256,&Serial,NULL,NULL,FS,128);
            CString Hdd;
            Hdd.Format("%s [%s] S\\N %d %s",CurDrive,VolumeName,Serial,FS);
            m_HddList.AddString(Hdd);
        }
        if ((Drives[CurIdx-1]==0)&&(Drives[CurIdx]==0)) return true;
        CurIdx++;
    }
    
    return true;
}
- Вы знаете — жаль, просто по-человечески жаль Памелу Андерсон, которая никогда не сможет сыграть на баяне...
Re[2]: Геометрия дисков
От: payglobal  
Дата: 20.03.03 09:36
Оценка:
Здравствуйте, Saddam, Вы писали:

S>Здравствуйте, Roman_M, Вы писали:


RM>>Как в Win9X определять геометрию дисков ? Нужны данные аналогичные DISK_GEOMETRY в WinNT. Нужно это для создания имиджей дисков.

S>Ищи в этом напралении:
S>
S>    if (osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
S>    {
S>        hSMARTIOCTL = CreateFile("c:\\asedtr.tmp", 0,0,0,CREATE_NEW, 0, 0);//\\\\.\\SMARTVSD
S>    }
S>        
S>


а если smartdrv отсутствует, то в \\\\.\\Ide
... << RSDN@Home 1.0 beta 6a >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.