📄 wd_syn.h
字号:
/**
@file wd_syn.h
@brief 同步元素头文件.如果你直接包含这个头文件,
在包含之前必须包含DDK相关头文件.(你可以
选择WDM或者IFS或者NDIS相关头文件.)
@author tan wen 谭文
@date 2005-12-20
*/
#ifndef _WD_SYN_HEADER_
#define _WD_SYN_HEADER_
typedef KSPIN_LOCK wd_splock;
typedef KIRQL wd_irql;
enum {
wd_irql_passive = PASSIVE_LEVEL
};
_inline wd_irql wd_get_cur_irql()
{
return KeGetCurrentIrql();
}
typedef struct _wd_spin{
wd_splock splock;
wd_irql irql;
} wd_spin;
_inline wd_void wd_spin_init(wd_spin *spin)
{ KeInitializeSpinLock(&spin->splock); }
_inline wd_void wd_spin_hold(wd_spin *spin)
{ KeAcquireSpinLock(&spin->splock,&spin->irql); }
_inline wd_void wd_spin_loose(wd_spin *spin)
{ KeReleaseSpinLock(&spin->splock,spin->irql); }
// 事件
typedef KEVENT wd_event;
_inline wd_void wd_event_init(wd_event *event)
{ KeInitializeEvent(event,NotificationEvent,FALSE); }
_inline wd_void wd_event_set(wd_event *event)
{ KeSetEvent(event,IO_NO_INCREMENT,FALSE); }
_inline wd_stat wd_event_wait(wd_event *event)
{ return KeWaitForSingleObject(event,Executive,KernelMode,FALSE,NULL); }
_inline wd_void wd_event_clear(wd_event *event)
{ KeClearEvent(event); }
// 我在windows2003下使用mutex,似乎常常进入死机状态,
// 原因还不明朗.
typedef KMUTEX wd_mutex;
_inline wd_mutex_init(wd_mutex *mutex)
{ KeInitializeMutex(mutex,0); }
_inline wd_mutex_hold(wd_mutex *mutex)
{ while(KeWaitForSingleObject(mutex,
Executive,
KernelMode,
FALSE,
0)!=wd_stat_suc){}; }
_inline wd_mutex_loose(wd_mutex *mutex)
{ KeReleaseMutex(mutex,FALSE); }
// 工作者线程
typedef WORK_QUEUE_ITEM wd_work_item;
typedef PWORKER_THREAD_ROUTINE wd_work_func;
_inline wd_void wd_work_init(wd_work_item *item,
wd_work_func worker,
wd_void *context)
{
ExInitializeWorkItem(item,worker,context);
}
typedef enum _wd_work_quque_type{
wd_work_crit = CriticalWorkQueue,
wd_work_delay = DelayedWorkQueue,
wd_work_hyper = HyperCriticalWorkQueue
} wd_work_queue_type;
_inline wd_void wd_work_queue(in wd_work_item *item,
in wd_work_queue_type type)
{
ExQueueWorkItem(item,(WORK_QUEUE_TYPE)type);
}
_inline wd_void wd_work_run(in wd_work_item *item)
{
(item->WorkerRoutine)(item->Parameter);
}
// 时钟
#endif // _WD_SYN_HEADER_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -