zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
阅读:3614回复:27

pc模拟环境下是否可以通过ActiveDeviceEx加载驱动?

楼主#
更多 发布于:2004-12-02 13:34
我已经把注册表和驱动DLL的接口全部准备好了,可是调用ActiveDeviceEx就是不成功
xdwumin
驱动牛犊
驱动牛犊
  • 注册日期2005-12-22
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望38点
  • 贡献值0点
  • 好评度37点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-29 15:30
在版主和其他朋友的帮助下解决了问题
应该具体写出来以便后来的朋友参考
这么只进不出怎么行?
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-10 18:26
我的调用ActivateDeviceEx函数的问题也解决了,再次也要谢谢wxl_50685330大哥。 :P
Come on, let us drive the world.
zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-10 16:36
哈,知道了
zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-10 16:36
看到了
zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-10 16:35
不会给分了,告诉我一声,给你加上
zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-12-10 16:33
没办法,我刚开始学wince,很多东西都不了解,非常感谢wxl_50685330,希望以后能得到更多指导,不要嫌烦哦,hehe,有机会请你吃饭 :)
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-12-10 14:08
哈哈,你娃终于搞定了,唉,有点儿劳命伤财的感觉,恭喜恭喜!!!
根据地的兄弟们,团结就是力量
zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-12-10 10:28
hehe,搞定,是open函数的问题。
zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-12-09 16:59
hehe,还几个事情不太清楚,想请教wxl_50685330:
1:应用程序调用ACtivateDeviceEx时,驱动里的XXX_Init应该被调用吧,可是我发现我在Init里的打印信息并没有输出, DLLMain里信息的也没有输出, 但是注册表里的Active键已经添加了我的驱动的信息。
2:我用设备名 TST0: 打开设备的时候,返回的句柄无效,错误代码时55,设备不存在, 这是为何?
zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-12-09 16:20
就是ptr的问题,不该加HKEY_LOCAL_MACHINE,
的确应该是LPCWSTR ptr= TEXT("Drivers\\MyDriver\\JD45")

 :)
zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-12-09 16:18
wxl_50685330
你真神了,太谢谢你了,我终于加载成功了,感激涕零
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-12-09 16:07
等等,我好像知道了!!!!


LPCWSTR ptr= TEXT("Drivers\\\\MyDriver\\\\JD45")
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-12-09 16:01
能重新链接os不?再试试把dll放到bib的modules里面呢
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-12-09 15:58
哈哈哈哈,不是吧,还是不行?是不是非要我亲自动手麻:)))

对了,是两个\\喔,实在不行...
根据地的兄弟们,团结就是力量
zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-12-09 14:30
.def里面LIBRARY drvdll 也改成LIBRARY STRATAD

 :(
55555
zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-12-09 14:28
我的程序里本来是:LPCWSTR ptr= TEXT("HKEY_LOCAL_MACHINE\\Drivers\\MyDriver\\JD45");拷贝的时候掉了\\

我在注册表里添加了Flag 设为2

可是还是不行,返回仍然是0



wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-12-09 14:05
2.LPCWSTR ptr= TEXT("HKEY_LOCAL_MACHINE\\\\Drivers\\\\MyDriverJD45");
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-12-09 14:04
我试试哈

1.你的drvdll.dll放到什么地方的?试试放到\\windows下

2.LPCWSTR ptr= TEXT("HKEY_LOCAL_MACHINE\\Drivers\\MyDriverJD45");

3..def里面LIBRARY drvdll写成LIBRARY STRATAD

4.在注册表设"Flags"=dword:00000002

再试试呢
根据地的兄弟们,团结就是力量
zhuyanjv
驱动牛犊
驱动牛犊
  • 注册日期2004-04-20
  • 最后登录2008-02-19
  • 粉丝0
  • 关注0
  • 积分58分
  • 威望8点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-12-09 10:19
to wwei_wang: 不知你成功没有,如果成功是什么原因呀?我的ActivatedeviceEx还是不行.

to wxl_50685330:

我现在不用模拟环境了,用一个工控主板加wince,evc装了该主板的sdk,重复以前的工作,编写dll,修改注册表,应用程序调用ActivateDeviceEx, 发现dll还是没有加载,苦闷呀。现在把所有的程序贴出来,wxl_50685330一定帮我看看。

def文件:

LIBRARY  drvdll

EXPORTS
    TST_Init
    TST_Deinit
    TST_Open
    TST_Close
    TST_Read
    TST_Write
    TST_Seek
    TST_IOControl
    TST_PowerUp
    TST_PowerDown


dll的cpp文件:

#include "stdafx.h"
typedef class CDriverContext * PDriverContext, * HDRIVER;
typedef struct _tag_OPENHANDLE
{
    HDRIVER hDriver;
} OPENHANDLE, *POPENHANDLE;
BOOL APIENTRY DllMain( HANDLE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved)
{
    RETAILMSG(1, (TEXT("enter dllmain")));
    return TRUE;
}
BOOL
TST_Init( PCTSTR pszActiveKey )
{
    RETAILMSG(1, (TEXT("enter init")));
    return TRUE;
}
BOOL
TST_Deinit(  )
{
    return TRUE;
}
VOID
TST_PowerUp(HDRIVER pDriver)
{
 
}
VOID
TST_PowerDown( HDRIVER pDriver )
{
 
}
POPENHANDLE
TST_Open(
    HDRIVER pDriver,
    DWORD dwAccess,
    DWORD dwShareMode
    )
{
    return NULL;
}
 BOOL
TST_Close( POPENHANDLE pOpenHandle )
{
    return TRUE;
}

 DWORD
TST_Read(
    POPENHANDLE pOpenHandle,
    LPVOID pBuf,
    DWORD Len
    )
{
    return 0;
}
 DWORD
TST_Write(
    POPENHANDLE pOpenHandle,
    LPCVOID pBuf,
    DWORD Len
    )
{  
    return 0;
}
 DWORD
TST_Seek(
    POPENHANDLE pOpenHandle,
    long pos,
    DWORD type
    )
{
    return (DWORD)-1;
}
 BOOL
TST_IOControl(
    POPENHANDLE pOpenHandle,
    DWORD  dwCode,
    PVOID pBufIn,
    DWORD  dwLenIn,
    PDWORD  pdwBufOut,
    DWORD  dwLenOut,
    PDWORD pdwActualOut
    )
{
  return TRUE;
}

修改注册表程序:
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR    lpCmdLine, int       nCmdShow)
{
HKEY hKey;
LPDWORD p = 0 ;
TCHAR ch[] = TEXT("Drivers\MyDriver\JD45");
LONG rc = RegCreateKeyEx(HKEY_LOCAL_MACHINE, ch, 0, NULL,
0, NULL,
NULL, &hKey,
p);
if(rc != ERROR_SUCCESS)
{
RegCloseKey (hKey);
}

TCHAR Dllname[] = TEXT("drvdll.dll");
rc = RegSetValueEx(hKey, TEXT("Dll"),
0,
           REG_SZ,
(PBYTE)Dllname,
(lstrlen (Dllname)+1) * sizeof(TCHAR));

TCHAR Prefix[] = TEXT("TST");
rc = RegSetValueEx(hKey,  TEXT("Prefix"),  0,
             REG_SZ,  (PBYTE)Prefix,  (lstrlen (Prefix)+1) * sizeof (TCHAR));

DWORD index = 0;
rc = RegSetValueEx(hKey,  TEXT("Index"),  0,
 REG_DWORD,
 (PBYTE)&index,  4);

DWORD order = 1;
rc = RegSetValueEx(hKey,
TEXT("Order"),
0,
REG_DWORD,
(PBYTE)&order, 4);
RegCloseKey (hKey);
return 0;
}

加载驱动程序:
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR    lpCmdLine, int       nCmdShow)
{
LPCWSTR  ptr= "HKEY_LOCAL_MACHINE\Drivers\MyDriver\JD45";
DWORD m;
HANDLE hDev = ActivateDeviceEx(ptr, NULL, 0, NULL);
m = GetLastError();
RETAILMSG(1, (TEXT("ActivateDevice code = %drn")),m);
return 0;
}

将dll下载到目标板,运行修改注册表的程序,发现注册表已经改变,运行加载程序,发现hDev仍然是0,看到到打印出来的错误码是59。不知道哪里除了问题。
上一页
游客

返回顶部