Powered By Blogger

For monitoring events for a network interface, the notification request ioctl IOCTL_NDISUIO_REQUEST_NOTIFICATION in NDISUIO driver can be used.

By using this Notification mechanism, we can capture events for each network interface in Windows CE such as

  • Bind
  • Unbind
  • Power Up
  • Power down
  • etc...
A sample implementation is provided in the NDISPWR driver in PUBLIC code
(WINCE600\PUBLIC\COMMON\OAK\DRIVERS\NETSAMP\NDISPWR)

Sunday, June 7, 2009

Keeping system alive

In power manager, the PDD has a certain set of events that it monitors. For eg:

  • PM_BOOTPHASE2_EVENT
  • PM_SYSTEM_API_EVENT etc
For more information on events each PDD handles, check the Power manager code available in PUBLIC code (WINCE600\PUBLIC\COMMON\OAK\DRIVERS\PM\PDD).

In those events there is event PM_SYSTEM_TIMEIDLE_RESET (PowerManager/SystemIdleTimerReset), which can used to reset the system activity timer. Check out the following piece of code for doing so.


HANDLE hSysTmrReset = CreateEvent(NULL, FALSE, FALSE, _T("PowerManager/SystemIdleTimerReset"));
BOOL bExit = FALSE;
if (INVALID_HANDLE_VALUE != hSysTmrReset )
{
while (FALSE == bExit)
{
ResetEvent(hSysTmrReset);
Sleep(1000);
SetEvent(hSysTmrReset);

RETAILMSG(TRUE, (TEXT("Reset\r\n")));
Sleep(20000);
}
CloseHandle (hSysTmrReset );
}
return 0;

This system, code will keep the system alive by resetting the timer every 20 seconds. I have tested this code and seems to be working. But needs to analyze the system performance on doing so.

Wednesday, June 3, 2009

Enabling agressive scanning for Wifi

To enable aggressive scanning for wifi network (preferred or non-preferred ones) in Wireless Zero Configuration in Windows CE, use this registry setting:

[HKEY_LOCAL_MACHINE\Comm\WiFi]
ScanInterval: dword:5
This will set WZC to scan for network every 5 seconds. By default, it is set to 60 seconds. Try tuning this value as per your requirement.

Thursday, April 23, 2009

Creating Cab Files

I found a really cool utility for creating CAB files for a windows ce device - Quick Cab.
Check it out.

http://forum.xda-developers.com/showthread.php?t=400221

Wednesday, April 15, 2009

War of the worlds

Guys check out the heated arguement in this post :)

http://blogs.msdn.com/mikehall/archive/2005/01/13/352470.aspx

Wednesday, April 8, 2009

Keyboard Hooking in Windows CE 6.0

If you want to monitor system wide keyboard events from an application, then we need to use keyboard hooking using the SetWindowsHookEx & UnhookWindowsHookEx functions. Since we need a system wide hook, we need to place the callback functions in a DLL.




typedef struct {
DWORD vkCode;
DWORD scanCode;
DWORD flags;
DWORD time;
ULONG_PTR dwExtraInfo;
} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
.....

VOID InitHook ()
{
.....
SetWindowsHookEx(WH_KEYBOARD_LL,hookproc,hinstance,NULL);
.....
}
....
HOOKDLL_API LRESULT CALLBACK hookproc(int ncode,WPARAM wparam,LPARAM lparam)
{
UINT uMsg = 0;
if(ncode>=0)
{
if((lparam & 0x80000000) == 0x00000000)//Check whether key was pressed(not released).
{
switch((((KBDLLHOOKSTRUCT*)lparam)->vkCode))
{
case VK_F1:
RETAILMSG(1,(TEXT("TRAPPED, F1\r\n")));
uMsg = WM_USER+755;
break;

case VK_F2:
RETAILMSG(1,(TEXT("TRAPPED, F2\r\n")));
uMsg = WM_USER+756;
break;

case VK_F3:
RETAILMSG(1,(TEXT("TRAPPED, F3\r\n")));
uMsg = WM_USER+757;
break;

case VK_F4:
RETAILMSG(1,(TEXT("TRAPPED, F4\r\n")));
uMsg = WM_USER+758;
break;
}

}
}
return ( CallNextHookEx(hook,ncode,wparam,lparam) );//pass control to next hook in the hook chain.
}


But in Wince 6.0, these APIs have been removed, but is still present in coredll. Hence, they can be accessed using LoadLibrary and GetProcAddress functions.


N.B: Special Thanks Prathamesh S Kulkarni on his article on keyboard hooking in code project.

Hi :)
First of all sorry guys, for the leave of absence, I have been busy lately.

In one of the tasks assigned for me, I had to bring the system back in to ON mode from idle, when any bluetooth activity happens. Activity in the sense, authentication request or a file transfer start etc.

File transfer or any other requests (except for pin request), can be tackled my monitoring the bluetooth stack events. But an authentication request cannot be obtained using the same. The the authentication ui for bluetooth is located in

WINCE600\PUBLIC\COMMON\OAK\DRIVERS\BLUETOOTH\SAMPLE\BTSVC

Its a service (BTSVC), and can modified directly or cloned By AuthenticationDlgProc and the corresponding dialog in the resource file, we can easily modify the behaviour during a bluetooth authentication request. Or a new application can be provided with the same functionality, do doing so , this service must be removed first as only one type of authentication ui will be allowed at a time.