переход на 0-ое кольцо под WinXP

Тема в разделе "WASM.WIN32", создана пользователем dima86, 13 ноя 2007.

  1. dima86

    dima86 New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    2
    Помогите пожалуйста найти прогу, которая с 3-его кольца ныряла на нулевое под WinXP. Мне просто нужно сосчитать регистры MSR, а они доступны только с 0-го кольца(в защищенном режиме). Заранее благодарен.
     
  2. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    Нырни через DeviceIoControl к своему драйверу.
    Или WinDbg запусти и посмотри.
     
  3. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    пиши дровер
     
  4. dima86

    dima86 New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    2
    А как про это прочесть поподробнее? Можеш скинуть линк?
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    dima86
    Поиск по форуму... даааавно поднималась тема ооочень давно
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Регистры мср можно читать/писать с помощью ZwSystemDebugControl.
     
  7. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    Кстати да, драйвер писать не обязательно :) ZwSystemDebugControl, DEBUG_CONTROL_CODE = DebugSysReadMsr / DebugSysWriteMsr
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Код (Text):
    1. enum {
    2.     SysDbgSysReadMsr = 16,
    3.     SysDbgSysWriteMsr = 17
    4. };
    5.  
    6. NTSTATUS WINAPI NtSystemDebugControl(...);
    7.  
    8. typedef struct _MSR_STRUCT {
    9.     /* 00 */ DWORD MsrNum;          // MSR number
    10.     /* 04 */ DWORD NotUsed;         // Never accessed by the kernel
    11.     /* 08 */ ULONGLONG MsrValue;    // 64bit MSR value
    12. } MSR_STRUCT, *PMSR_STRUCT;
    13.  
    14. //
    15. // Read MSR
    16. //
    17.  
    18. ULONGLONG ReadMsr( LONG MsrNum )
    19. {
    20.     MSR_STRUCT Msr = {0};
    21.     Msr.MsrNum = MsrNum;
    22.  
    23.     NTSTATUS Status = fNtSystemDebugControl (
    24.         SysDbgSysReadMsr,
    25.         &Msr,
    26.         sizeof(Msr),
    27.         NULL,
    28.         0,
    29.         0
    30.         );
    31.    
    32.     if( !NT_SUCCESS(Status) )
    33.     {
    34.         return 0;
    35.     }
    36.        
    37.     return Msr.MsrValue;
    38. }
    39.  
    40.  
    41. //
    42. // Write MSR
    43. //
    44.  
    45. BOOL WriteMsr( LONG MsrNum, ULONGLONG Value )
    46. {
    47.     MSR_STRUCT Msr = {0};
    48.     Msr.MsrNum = MsrNum;
    49.     Msr.MsrValue = Value;
    50.  
    51.     NTSTATUS Status = fNtSystemDebugControl (
    52.         SysDbgSysWriteMsr,
    53.         &Msr,
    54.         sizeof(Msr),
    55.         NULL,
    56.         0,
    57.         0
    58.         );
    59.    
    60.     if( !NT_SUCCESS(Status) )
    61.     {
    62.         return FALSE;
    63.     }
    64.  
    65.     return TRUE;
    66. }