高分求解,NTDDK问题3

CoGi 2000-04-25 10:42:00
小弟最近在写一个驱动,接任务以后才知道奇惨无比,每天死机N次,还要抽空看硬件资料,看Asm,可怜的CoGi一个月来已瘦了好多,现在又要忍痛大出血,200分想想实在心疼。但只要各位大虾不吝指教,CoGi也只好故作慷慨了。(论坛最高只允许给98,CoGi只好将其拆开,请各位大虾不厌其凡,多看两篇)
问题1,2各50,问题3有98,用NTDDK回答也给分。
3.我的驱动须与上层同步,我使用一个信号量,但不知如何传递该信号量,我的实现如下:
Application:
CreateSemaphore(NULL,0,1,"MySemaphore");
Driver:
XxDevice():KDevice()
{
;
m_Semaphore = New(NonPagedPool)KSemaphore
(L"\\BaseNamedObjects\\MySemaphore")
if (m_Semaphore->IsValid()) //检测信号量会报错

}
...全文
175 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
CoGi 2000-05-01
  • 打赏
  • 举报
回复
luo:
谢谢你,热心地给我答复,不过我想得到的不是命名Event的实现,而是命名Semaphore的实现.
有文档说,微软实现了一个未公开的ObReferenceObjectByName的API,我试了一下,编译通过了,但调试时无法通过.
后来我通过ObReferenceObjectByHandle实现了我的要求,但觉得有点绕圈子,不知道你有没更好的方法,希望能和你一起探讨.
送上我的分数,并再次谢谢你,还有simon_sun
lu0 2000-04-29
  • 打赏
  • 举报
回复
DRIVER SIDE

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING
RegistryPath)
{
...
// Create a named notification event that will be used to signal when
// the timer routine has hit its count. Make sure to set the state to
// non-signalled.
//
RtlInitUnicodeString(&eventName,
L"\\BaseNamedObjects\\Async2SignalEvt");
extension->Event =
IoCreateNotificationEvent(&eventName,&extension->Handle);

if(!extension->Event) {
IoDeleteDevice(DeviceObject);
return(STATUS_UNSUCCESSFUL);
}

KeClearEvent(extension->Event);

...
}

And when you want to send the event to the appli. :

KeSetEvent(extension->Event,0,FALSE);
KeClearEvent(extension->Event);


APPLICATION SIDE

VOID SignalEvent186(VOID)
{
HANDLE event;
USHORT count = 0;
event = OpenEvent(SYNCHRONIZE,FALSE,"Async2SignalEvt");

if (event == NULL)
{
Tracef("Error opening event: %d\n", GetLastError()) ;
return;
}

for(;;) {
WaitForSingleObject(event,INFINITE);
Tracef("Event signalled! .... count = %d",count++);
}
CloseHandle(event);
}
CoGi 2000-04-27
  • 打赏
  • 举报
回复
看来CoGi的人缘比较差,除了simon_sun这位热心的网友外,都没人愿意理我,不过还好
CoGi的运气不错,已找到问题3的答案.
有兴趣的网友可以向我索取,只要你愿意给分.
simon_sun 2000-04-26
  • 打赏
  • 举报
回复
试试CreateSemaphore(NULL,1,1,"MySemaphore");
如果还不行,只有试试其它同步方法了
CoGi 2000-04-25
  • 打赏
  • 举报
回复
simon_sun
谢谢你的关注,虽然我不知如何在Driver & Application 间如何用Semaphore,但我知道在Win32不同进程间可以用命名信号量,包括子进程继承等3种不同情况,在MSDN CreateSemaphore 中有详细的介绍。
为了谢谢第一位关注CoGi问题的网友,我将给你赠一定的分数,请不要嫌少,请继续关注。
simon_sun 2000-04-25
  • 打赏
  • 举报
回复
据我所知,进程间同步可以用互斥量(Mutex),信号量只能用于同一进程内的线程间同步!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧