⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 driver.cpp

📁 Windows WDM 设备驱动程序开发指南光盘 保护随书的源代码
💻 CPP
字号:
// driver.cpp -- Dummy device interfaces for sample property page provider
// Copyright (C) 1998 by Walter Oney
// All rights reserved

// This module implements the CDriver class used in the sample power-management
// property page.
// and set parameter values.

#include "stdafx.h"
#include "driver.h"

// Include the declaration of the IOCTL codes used by the associated driver

#include <winioctl.h>
#include <initguid.h>
#include "GenericPower.h"

///////////////////////////////////////////////////////////////////////////////

CDriver::CDriver(CDeviceListEntry* device)
	{							// CDriver::CDriver
	m_changed = FALSE;
	m_name = device->m_linkname;
	m_friendlyname = device->m_friendlyname;
	m_wakeup = FALSE;
	m_itoPlugged = 0;
	m_itoUnplugged = 0;
	m_canidle = FALSE;
	m_canwake = FALSE;
	m_idle = FALSE;
	Refresh();
	}							// CDriver::CDriver

CDriver::~CDriver()
	{							// CDriver::~CDriver
	}							// CDriver::~CDriver

///////////////////////////////////////////////////////////////////////////////

void CDriver::IdleNow()
	{							// CDriver::IdleNow
	if (!CanIdle())
		return;
	HANDLE hDevice = CreateFile(m_name, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
	if (hDevice == INVALID_HANDLE_VALUE)
		return;
	DWORD junk;
	if (DeviceIoControl(hDevice, IOCTL_IDLENOW, NULL, 0, NULL, 0, &junk, NULL))
		m_idle = TRUE;
	CloseHandle(hDevice);
	}							// CDriver::IdleNow

///////////////////////////////////////////////////////////////////////////////

void CDriver::GetIdleTimeouts(PPOWER_DEVICE_TIMEOUTS ppdt)
	{							// CDriver::GetIdleTimeouts
	ppdt->ConservationIdleTime = m_itoUnplugged;
	ppdt->PerformanceIdleTime = m_itoPlugged;
	}							// CDriver::GetIdleTimeouts

///////////////////////////////////////////////////////////////////////////////

void CDriver::Refresh()
	{							// CDriver::Refresh
	HANDLE hDevice = CreateFile(m_name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
	if (hDevice == INVALID_HANDLE_VALUE)
		return;

	POWERINFO pi;
	DWORD junk;
	
	if (DeviceIoControl(hDevice, IOCTL_GET_POWERINFO, NULL, 0, &pi, sizeof(pi), &junk, NULL))
		{						// initialize settings
		m_responding = TRUE;
		m_itoPlugged = pi.ulPerformance;
		m_itoUnplugged = pi.ulConservation;
		m_wakeup = pi.bWakeup;
		m_canwake = pi.bCanWake;
		m_canidle = pi.bCanIdle;
		m_idle = pi.bIdle;
		}						// initialize settings
	else
		m_responding = FALSE;

	CloseHandle(hDevice);
	}							// CDriver::Refresh

///////////////////////////////////////////////////////////////////////////////

void CDriver::SaveChanges()
	{							// CDriver::SaveChanges
	if (!m_changed)
		return;

	m_changed = FALSE;

	HANDLE hDevice = CreateFile(m_name, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
	if (hDevice == INVALID_HANDLE_VALUE)
		return;

	POWERINFO pi;
	pi.ulConservation = m_itoUnplugged;
	pi.ulPerformance = m_itoPlugged;
	pi.bWakeup = m_wakeup == TRUE;
	pi.bCanWake = m_canwake;
	pi.bCanIdle = m_canidle;
	pi.bIdle = m_idle;

	DWORD junk;
	DeviceIoControl(hDevice, IOCTL_SET_POWERINFO, &pi, sizeof(pi), NULL, 0, &junk, NULL);
	CloseHandle(hDevice);
	}							// CDriver::SaveChanges

///////////////////////////////////////////////////////////////////////////////

void CDriver::SetIdleTimeouts(PPOWER_DEVICE_TIMEOUTS ppdt)
	{							// CDriver::SetIdleTimeouts
	if (m_itoUnplugged == ppdt->ConservationIdleTime
		&& m_itoPlugged == ppdt->PerformanceIdleTime)
		return;

	m_itoUnplugged = ppdt->ConservationIdleTime;
	m_itoPlugged = ppdt->PerformanceIdleTime;
	m_changed = TRUE;
	}							// CDriver::SetIdleTimeouts

///////////////////////////////////////////////////////////////////////////////

void CDriver::SetWakeupEnable(BOOL enable)
	{							// CDriver::SetWakeupEnable
	if (m_wakeup == enable)
		return;
	m_wakeup = enable;
	m_changed = TRUE;
	}							// CDriver::SetWakeupEnable

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -