我用VC做了一个COM,其他有两个函数用来创建同名的一个Event,分另由一个NT Service和一个JAVA 程序通过JNI使用。首先由NT SERVICE在启动时创建一COM进程,并创建一个该EVENT对象,但在在这后,一个JAVA程序通过JNI来创建COM一个进程并创建与NT SERICE创建的EVENT对象,竟然提示创建成功了。代码如下:
由NT SERVICE在启动时调用:
m_hStoppedForWeb = CreateEvent(NULL,TRUE,FALSE,"StoppedForWeb");由JAVA程序通过调用: m_hStoppedForWeb = CreateEvent(NULL,TRUE,FALSE,"StoppedForWeb");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
m_hStoppedForWeb = OpenEvent(EVENT_ALL_ACCESS,FALSE,"StoppedForWeb");
if (m_hStoppedForWeb == NULL)
{
OutputDebugString("The StoppedForWeb event cannot be opened.");
}
else
{
OutputDebugString("Open the StoppedForWeb event successfully");
}
}
请问各位VCER这是什么原因啊?先谢谢啦!
由NT SERVICE在启动时调用:
m_hStoppedForWeb = CreateEvent(NULL,TRUE,FALSE,"StoppedForWeb");由JAVA程序通过调用: m_hStoppedForWeb = CreateEvent(NULL,TRUE,FALSE,"StoppedForWeb");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
m_hStoppedForWeb = OpenEvent(EVENT_ALL_ACCESS,FALSE,"StoppedForWeb");
if (m_hStoppedForWeb == NULL)
{
OutputDebugString("The StoppedForWeb event cannot be opened.");
}
else
{
OutputDebugString("Open the StoppedForWeb event successfully");
}
}
请问各位VCER这是什么原因啊?先谢谢啦!
解决方案 »
- 请问--怎样通过进程ID使当前进程的活动窗口置前
- 求助WINDOWS下(非MFC)的List Control控件的编写
- opengl 实现球的阴影
- 这个技术是怎么实现的?
- char * 和char[]的区别救命啊
- 如何取得系统时间
- 如何根据视图大小改变框架窗口的大小
- CComboBox* pCombo = (CComboBox*)GetDlgItem(IDC_COMBO1);
- win7下关闭aero
- Help me!两段关于高程考试的C程序
- 用VC .net 2003 ATL 写的COM+组件不能够在Windows Server 2000 下注册
- 求助:帮助解决带FixedCol的ListCtrl,重分酬谢!
当服务创建了一个内核对象以后,普通应用程序再创建的时候,实际上创建完的名字是类似这样“\BaseNamedObjects\mixercallback”,“\BaseNamedObjects\hardwaremixercallback”的名字了,而不是你程序里写的那个。
原因是什么,我也不知道。
没有被CloseHandle
请问哪里可以看到 Event对象的名字。
www.sysinternals.com下载。选种进程以后,下半截的view里面的内容选择“view handles”
这句话多余,另外,如果你是Service创建的Event,
m_hStoppedForWeb = CreateEvent(NULL,TRUE,FALSE,"StoppedForWeb");
这句话如果是在桌面程序中使用,则直接失败,错误返回不是已经存在,而是你无权访问,如果希望能被其他用户访问,一是让Service运行在你的程序启动的同一个用户下,还有一种办法是指定安全特性,要使用到CreateEvent的第一个参数,详见msdn上的Knowledge Base PSS ID Number: Q106387
HOWTO: Share Kernel Objects Between Processes
Return Values
If the function succeeds, the return value is a handle to the event object. If the named event object existed before the function call, the function returns a handle to the existing object and GetLastError returns ERROR_ALREADY_EXISTS.
还有就是没有别要再调用函数OpenEvent了,这是多余的。