· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› kernel mode. Вывод из спячки видяхи.

Посл.отвђт Сообщенiе


Дата: Июл 2, 2004 16:04:45

Привет всем!

Вот решил я перевести в спячку видяху, чтобы можно было поберечь монитор, а все остальное бы работало, когда ухожу по делам. ScreenSaver меня не устраивает! Но вот перевести в спячку я смог, а вывести нет. :-( Может кто знает? Помогите, плз!!!
BOOLEAN PowerManagementTheDisplayAdapter()//IRQL=PASSIVE_LEVEL
{
	NTSTATUS ntStatus;
	PWSTR  pSymbolicLinkList;
	UNICODE_STRING DevName;
	PDEVICE_OBJECT DevObject;
	PFILE_OBJECT FileObject;
	POWER_STATE State;
	LARGE_INTEGER time;
	//Получаю символ. имена уст-в
	ntStatus = IoGetDeviceInterfaces(&GUID_DEVINTERFACE_DISPLAY_ADAPTER, NULL, DEVICE_INTERFACE_INCLUDE_NONACTIVE, &pSymbolicLinkList);
	if ((NT_SUCCESS(ntStatus) != FALSE) && (*pSymbolicLinkList != (WCHAR)0x0000))
	{
		RtlInitUnicodeString(&DevName, (WCHAR*)pSymbolicLinkList);//беру 1 SymbolicLink из pSymbolicLinkList

		//Получаю указатель на уст-во (вверху стека уст-в)
		ntStatus = IoGetDeviceObjectPointer(&DevName, FILE_READ_DATA, &FileObject, &DevObject);
		
		ExFreePool(pSymbolicLinkList);
		pSymbolicLinkList = NULL;

		if (NT_SUCCESS(ntStatus) )
		{
			State.DeviceState = PowerDeviceD1;//PowerDeviceD3
			PoRequestPowerIrp(DevObject, IRP_MN_SET_POWER, State, 0, 0, 0);//Перевожу в спячку

			time.QuadPart = -10000*10000;//10 сек.

			KeDelayExecutionThread(KernelMode, FALSE, &time);

			State.DeviceState = PowerDeviceD0;
			PoRequestPowerIrp(DevObject, IRP_MN_SET_POWER, State, 0, 0, 0);//Включаю

			return TRUE;
		}
	}
	return FALSE;
}


Дата: Июл 6, 2004 06:41:35

а теперь погляди внимательно в биос, не включён ли там DPMS на максимум ? Лучше убери енту опцию в дисаблед. Просто эта хрень, по имени ацэпеи, имеет обыкновение жить своей жизнью независимо от оси.


Дата: Июл 6, 2004 06:43:42

если найду код, то вывалю, как енто через порты в\в делается проще.


Дата: Июл 6, 2004 07:05:44

;ето ево гасит, монитор
seg000:0157 mov dx, 3D4h
seg000:015A mov al, 17h
seg000:015C out dx, al ; Video: CRT cntrlr addr
seg000:015C ; mode control.Data bits:
seg000:015C ; 0:0=CGA compatible
seg000:015C ; 1:select row scan counter
seg000:015C ; 2:hor retrace:1=double vert res
seg000:015C ; 3:1=use char clock/2 for word refresh
seg000:015C ; 4:1=high impedance on output
seg000:015C ; 5:addr wrapping mode
seg000:015C ; 6:1=byte,0=word mode
seg000:015C ; 7:0=hardware reset
seg000:015D inc dx
seg000:015E in al, dx ; Video: CRT controller internal registers
seg000:015F and al, 7Fh
seg000:0161 out dx, al ; Video: CRT controller internal registers


;ето ево обратна зажигает
seg000:0157 mov dx, 3D4h
seg000:015A mov al, 17h
seg000:015C out dx, al ; Video: CRT cntrlr addr
seg000:015C ; mode control.Data bits:
seg000:015C ; 0:0=CGA compatible
seg000:015C ; 1:select row scan counter
seg000:015C ; 2:hor retrace:1=double vert res
seg000:015C ; 3:1=use char clock/2 for word refresh
seg000:015C ; 4:1=high impedance on output
seg000:015C ; 5:addr wrapping mode
seg000:015C ; 6:1=byte,0=word mode
seg000:015C ; 7:0=hardware reset
seg000:015D inc dx
seg000:015E in al, dx ; Video: CRT controller internal registers
seg000:015F and al, NOT 7Fh
seg000:0161 out dx, al ; Video: CRT controller internal registers


Дата: Июл 9, 2004 05:00:50 · Поправил: rsrc

CARDINAL, THANx!!!!
Не зря у тебя такой ник!!! СПАСИБО!!!


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.043