|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.03.2011, 23:49 | #1 |
Новичок
Джуниор
Регистрация: 17.03.2011
Сообщений: 1
|
Ядро NT. Не доходит до спикера.
Здравствуйте! Вынужден обратиться за помощью, т.к. столкнулся с рядом проблем по время написания драйвера для Windows. Проблема в том что почему то данные не доходят до спикера. Выложил код на С помогите пожалуйста, т.к. сдать надо в скором времени...Спасибо огромное!
#include <ntddk.h> #define IOCTL_PLAY CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS) #define SPEAKER_PORT 0x61 #define PIT_CONTROL 0x43 #define PIT_CHANNEL_2 0x42 #define PIT_FREQ 0x1234DD #define DELAY_LENGTH 100 VOID Play(PUCHAR Buffer, ULONG Length) { UCHAR count_values[256] = {0}; ULONG i, j; for(i = 0; i <= 255; i++) { count_values[i] = (UCHAR)((i * 54) / 255); } DbgPrint("Completing the table ok\n"); _outp(PIT_CONTROL, 0x90); DbgPrint("Writing to PIT_CONTROL ok\n"); _outp(SPEAKER_PORT,(_inp(0x61)|0x03 )); DbgPrint("Writing to SPEAKER_PORT ok\n"); __asm cli DbgPrint("CLI ok\n"); for(i = 0; i <= Length; i++) { _outp(PIT_CHANNEL_2, count_values[Buffer[i]]); for(j = 0; j <= DELAY_LENGTH; j++); _outp(PIT_CHANNEL_2, count_values[Buffer[i]]); for(j = 0; j <= DELAY_LENGTH; j++); } __asm sti _outp(SPEAKER_PORT,_inp(SPEAKER_POR T)&0xfc); _outp(PIT_CONTROL, 0xb6); } NTSTATUS CompleteIrp(PIRP Irp, NTSTATUS status, ULONG info) { Irp->IoStatus.Status = status; Irp->IoStatus.Information = info; IoCompleteRequest(Irp, IO_NO_INCREMENT); return status; } NTSTATUS CreateDevice(IN PDEVICE_OBJECT fdo, IN PIRP Irp) { DbgPrint("Device opened"); return CompleteIrp(Irp, STATUS_SUCCESS, 0); } NTSTATUS CloseDevice(IN PDEVICE_OBJECT fdo, IN PIRP Irp) { DbgPrint("Device closed"); return CompleteIrp(Irp, STATUS_SUCCESS, 0); } NTSTATUS DriverIOCTL(IN PDEVICE_OBJECT fdo, IN PIRP Irp) { NTSTATUS status = STATUS_SUCCESS; PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation(Irp); ULONG ControlCode = IrpStack->Parameters.DeviceIoControl.IoContr olCode; ULONG method = ControlCode & 0x03; ULONG BytesTxd = 0; UCHAR * Buffer; DbgPrint("IOCTL"); if(ControlCode == IOCTL_PLAY) { ULONG InputLength = IrpStack->Parameters.DeviceIoControl.InputBu fferLength; ULONG OutputLength = IrpStack->Parameters.DeviceIoControl.OutputB ufferLength; Buffer = (PUCHAR)Irp->AssociatedIrp.SystemBuffer; DbgPrint("Buffer received"); Play(Buffer, InputLength); BytesTxd = 0; } return CompleteIrp(Irp, status, BytesTxd); } VOID DriverUnload(IN PDRIVER_OBJECT DriverObject) { WCHAR DOSNameBuffer[] = L"\\DosDevices\\giveio"; UNICODE_STRING uniDOSString; RtlInitUnicodeString(&uniDOSString, DOSNameBuffer); IoDeleteSymbolicLink (&uniDOSString); IoDeleteDevice(DriverObject->DeviceObject); } NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { ULONG i; UNICODE_STRING devName, symLink; NTSTATUS status = STATUS_SUCCESS; PDEVICE_OBJECT fdo; DbgPrint("Driver_Entry\n"); for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++) { DriverObject->MajorFunction[i] = NULL; } DriverObject->MajorFunction[IRP_MJ_CREATE] = CreateDevice; DriverObject->MajorFunction[IRP_MJ_CLOSE] = CloseDevice; DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DriverIOCTL; DriverObject->DriverUnload = DriverUnload; RtlInitUnicodeString(&devName,L"\\D evice\\giveio"); RtlInitUnicodeString(&symLink,L"\\D osDevices\\giveio"); status = IoCreateDevice(DriverObject,0, &devName, FILE_DEVICE_UNKNOWN, 0, TRUE, &fdo); if(!NT_SUCCESS(status)) { DbgPrint("IoCreateDevice ERROR\n"); return status; } status = IoCreateSymbolicLink(&symLink, &devName); if(!NT_SUCCESS(status)) { IoDeleteDevice(fdo); DbgPrint("IoCreateSymbolicLink ERROR\n"); return status; } return status; } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
не доходит до моей тупой башки | Катька=) | Помощь студентам | 5 | 17.03.2011 20:15 |
Неизвестный звук спикера | balaxai | Компьютерное железо | 3 | 01.03.2011 21:50 |
Не доходит!Защита листа и группировка | magana | Microsoft Office Excel | 3 | 04.09.2010 11:39 |
Ядро | Adblock | PHP | 13 | 22.06.2010 21:16 |
ATL DLL ядро и интерфейс на C# | ForveAvar | Общие вопросы .NET | 0 | 19.10.2009 19:42 |