본문 바로가기

Hello CE,Mobile

WIN32 API

======================================================================

System Management Reference

======================================================================

  BOOL KernelIoControl(

  DWORD dwIoControlCode,

  LPVOID lpInBuf,

  DWORD nInBufSize,

  LPVOID lpOutBuf,

  DWORD nOutBufSize,

  LPDWORD lpBytesReturned

);

======================================================================

dwIoControlCode IOCTL_HAL_GET_WAKE_SOURCE

======================================================================

처음 부팅했을 때 함수를 호출 하면 SYSWAKE_UNKNOWN 이 return 되고, sleep 에서 wakeup 할때의 source 를 일반상태에서는 return 한다.


======================================================================

Power Management Functions

======================================================================


● 전체 시스템 power state 변경

DWORD SetSystemPowerState(  

  LPCWSTR psState, 여기 값이 있으면 아래 StateFlags 값이 있어도 무시 된다.

  DWORD StateFlags,

  DWORD Options); 


psState 

의 string 은 

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Power\State]아래 키에 해당하는 것들이다. (backlightoff, coldreboot, on, reboot, resuming, screenoff, suspend, unattended, useridle)


StateFlags 

는 pm.h 헤더에 정의 되어 있다.

위의 레지스트리 키에서 backlightoff의 flags 의 상태가 여기에 해당된다.

ex)

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\State\BacklightOff]

    "Flags"=dword:10010000      ; POWER_STATE_ON | POWER_STATE_PASSWORD


● 디바이스 power state 변경

DWORD DevicePowerNotify(

  PVOID pvDevice,

  CEDEVICE_POWER_STATE DeviceState,

  DWORD Flags

);



● 디바이스 power state 변경

HANDLE SetPowerRequirement(

  PVOID pvDevice,                                L"COM1"

  CEDEVICE_POWER_STATE DeviceState,      D0, D1, D2, D3, D4

  ULONG DeviceFlags,                           

  PVOID pvSystemState,

  ULONG StateFlags

);

DWORD ReleasePowerRequirement(

  HANDLE hPowerReq

);

DeviceState minimum device power state 

ex) 만약 백라이트가 unattend 모드에서 D4 를 사용하는데 SetPowerRequirement 함수를 사용하여 D0 로 요청하게 되면 minimum 이 D0 가 되기 때문에 unattend 에서도 D0 를 유지 한다. 

이를 해제 하기 위해서는 ReleasePowerRequirement 를 요청하거나 어플리케이션(exe,dll) 이 종료 되면 해제가 된다.


======================================================================

Process and Thread Functions

======================================================================

CeSetThreadPriority 는 0 ~ 255 지정

SetThreadPriority 는 248 ~ 255 사용 가능