/************************************************************************************
**本文为作者原创,转载请注明出处,未经本人允许请勿用于商业用途!
**Author:于海平
** 邮箱:linux_fish@126.com
**本文链接:http://blog.youkuaiyun.com/drivelinux/article/details/8484252
*************************************************************************************/
一、物理地址到虚拟地址的映射
1.MmMapIoSpace()
PVOID MmMapIoSpace(
PHYSICAL_ADDRESS PhysicalAddress, //需要映射的物理地址
ULONG NumberOfBytes, //映射长度
BOOLEAN CacheEnable //对设备寄存器而言,其值通常为FALSE
);
该函数的返回值为一个虚拟地址,或NULL。
2.MmUnmapIoSpace()
VOID MmUnmapIoSpace(
PVOID BaseAddress, //需要取消映射的虚拟地址
ULONG NumberOfBytes //字节数
);
该函数无返回值。
二、线程编程
1.CreateThread()
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpsa, //应设置为NULL
DWORD cbStack, //当设置了STACK_SIZE_PARAM_IS_A_RESERVATION标识时,表示为新线程所保留的虚拟内存
LPTHREAD_START_ROUTINE lpStartAddr,//要创建的线程函数的地址
LPVOID lpvThreadParam, //传给线程的一个32位的参数
DWORD fdwCreate, //控制创建线程的标识
LPDWORD lpIDThread //一个指向32位的变量的指针,该指针用于接收着线程的标识符
);
返回值:若返回一个指向线程的句柄,则表示创建线程成功,否则,若返回NULL,表示创建失败。
该函数在调用它的进程所在的地址空间创建一个线程。fdwCreate的取值及意义如下表所示。
Value | Description | ||
CREATE_SUSPENDED |
| ||
STACK_SIZE_PARAM_IS_A_RESERVATION |
|
2.CeGetThreadPriority()
int CeGetThreadPriority(
HANDLE hThread //线程的句柄
);
该函数用于获取一个线程的优先级。返回值:若调用成功,则返回一个0~255的优先级值,0为最高优先级,若返回THREAD_PRIORITY_ERROR_RETURN,表示调用失败。
3.CeSetThreadPriority()
BOOL CeSetThreadPriority(
HANDLE hThread, //线程的句柄
int nPriority //要设置的优先级,0~255
);
该函数用于设置线程的优先级。
4.ExitThread()
VOID ExitThread(
DWORD dwExitCode //退出码
);
该函数用于结束一个线程。
5.GetCurrentThread()
HANDLE GetCurrentThread(void);
该函数返回当前线程的伪句柄。
三、等待内核对象
1.WaitForSingleObject()
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
2.WaitForMultipleObjects()
DWORD WaitForMultipleObjects(
DWORD nCount,
CONST HANDLE* lpHandles,
BOOL fWaitAll,
DWORD dwMilliseconds
);
四、电源管理
1.DevicePowerNotify()
DWORD DevicePowerNotify(
PVOID pvDevice,
CEDEVICE_POWER_STATE DeviceState,
DWORD Flags
);
该函数请求电源管理器改变指定设备的电源状态。
五、事件函数
1.CreateEvent()
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES
lpEventAttributes, //应设置为NULL
BOOL bManualReset, //表示创建的事件对象是手动复位还是自动复位的一个布尔型变量
BOOL InitialState, //指示事件的初始状态
LPTSTR lpName //事件名
);
该函数用于创建一个事件对象。
2.SetEvent()
BOOL SetEvent(
HANDLE hEvent //事件对象的句柄
);
该函数的作用是设置事件的状态为有标记,释放任意等待线程。常和WaitForSingleObject()、WaitForMultiObjects()配合使用,来使两个函数从等待状态中返回退出。进而结束线程的运行。