Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2010, 09:15   #1
racushka_n
Пользователь
 
Аватар для racushka_n
 
Регистрация: 20.05.2010
Сообщений: 17
Сообщение Драйвер выводящий содержимое таблицы IDT

Есть проблемка, с языком си не очень знакома, больше с++; отличий не знаю.
Есть задание написать драйвер на С, скомпилить его через WDK, ну и в DebugView посмотреть что выводит. Так вот вывести он должен содержимое таблицы IDT. Есть команда sidt. С ее помощью мы определяем базу и смещение таблицы. Теперь нужно как-то еще все остальное вывести. Я попыталась, но при выполнении команды build в WDK возникают ошибки:
syntax error : missing '{' before '*'
Вот код:
Код:
// TestDriver.c
 
#include <ntddk.h>
 
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);
VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject);
 
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, UnloadRoutine)

typedef struct P48
{
 unsigned short limit;
 unsigned base; 
} P48;
byte *adr;
 
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
{
  P48 IDTR;
  DriverObject->DriverUnload = UnloadRoutine;
 
  DbgPrint("Hello world!\n");
  __asm
  {
   sidt IDTR 
  }
DbgPrint("IDT base = %08X\n", IDTR.base);
*adr=IDTR.base;
for(*adr=IDTR.base; *adr<IDTR.limit; *adr++)
{
 DbgPrint("IDT  = %08X\n", adr);
}


DbgPrint("IDT limit = %08X\n", IDTR.limit);
 
  return STATUS_SUCCESS;
}
 
VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject)
{
  DbgPrint("Goodbye!\n");
}
Подскажите пожалуйста, как правильно сделать?
racushka_n вне форума Ответить с цитированием
Старый 01.11.2010, 09:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
byte *adr;
А почему байт? Насколько я знаю адресам нужно не менее DWORD
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.11.2010, 09:26   #3
racushka_n
Пользователь
 
Аватар для racushka_n
 
Регистрация: 20.05.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А почему байт? Насколько я знаю адресам нужно не менее DWORD
видимо потому что адрес базы выводит как 8 16-ричных цифр. Сейчас попробую изменить на dword
racushka_n вне форума Ответить с цитированием
Старый 01.11.2010, 09:32   #4
racushka_n
Пользователь
 
Аватар для racushka_n
 
Регистрация: 20.05.2010
Сообщений: 17
По умолчанию

Изменила на dword... не помогло
Решила изменить в цикле
Код:
for(*adr=IDTR.base; *adr<IDTR.limit; *adr++)
на
Код:
for(*adr=IDTR.base; *adr<IDTR.limit+IDTR.base; *adr++)
все равно та же ошибка=(
racushka_n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Командный .bat файл выводящий на экран bmp файлы каталога и его подкаталогов. Avin Помощь студентам 2 11.10.2010 13:59
авт. перенос данных из нескольких столбцов одной таблицы в один столбец другой таблицы A_ALL Microsoft Office Access 7 24.08.2009 21:13
Данные из двух полей исх. таблицы в одно поле сводной таблицы Strelec79 Microsoft Office Excel 2 02.08.2009 13:59
Как вывести содержимое StringGrid на принтер именно в виде таблицы program123 Компоненты Delphi 4 14.02.2009 16:24
убрать вложенные таблицы из таблицы в режиме просмотра 2007 Baxxter Microsoft Office Access 2 17.11.2008 21:28