LittleCoffee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-22
  • 最后登录2007-10-03
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1247回复:10

CreateFile的超简单问题

楼主#
更多 发布于:2004-10-13 17:00
写了一个驱动,然后在vc6的app中测试

void CMy111Dlg::OnOK()
{
hDriver1 = CreateFile("\\\\.\\ABCDE",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

}

void CMy111Dlg::OnButton1()
{
hDriver2 = CreateFile("\\\\.\\ABCDE",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
}

第一个被点击的是正确的,第二个被点击的就是错误的,比如,第一次点击ok,hDriver1有值,再点击button1,hDriver2=INVALID_HANDLE_VALUE,GetLastError=5发现是权限不够;如果我第一次点击的是button1,则hDriver2有值,正确,再点击ok,发现hDriver1=INVALID_HANDLE_VALUE,GetLastError=5,这到底是怎么回事?搞了一天没搞定

ABCDE这个驱动是用于in和out的,和winio差不多,我已经注册成自动了

大侠帮帮忙
xx_focus
驱动中牛
驱动中牛
  • 注册日期2003-08-06
  • 最后登录2007-06-08
  • 粉丝0
  • 关注0
  • 积分96分
  • 威望10点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-13 17:15
你使用了同一个符号名连接来打开设备当然不行了。
还有,要看你的驱动源码中是不是使用 "ABCDE%d",id+1 方式创建连接符号名的,如果是,那么你在家在驱动时也要使用这种方式,如果没有使用就只能同时打开一个了。
LittleCoffee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-22
  • 最后登录2007-10-03
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-14 09:21
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath)
{
PDEVICE_OBJECT DeviceObject;
NTSTATUS status;
   PLOCAL_DEVICE_INFO DeviceExtension;

WCHAR NameBuffer[] = L"\\Device\\ABCDE";
WCHAR DOSNameBuffer[] = L"\\DosDevices\\ABCDE";
UNICODE_STRING uniNameString, uniDOSString;

RtlInitUnicodeString( &uniNameString, NameBuffer );
RtlInitUnicodeString( &uniDOSString, DOSNameBuffer );

status = IoCreateDevice(DriverObject, sizeof(LOCAL_DEVICE_INFO), &uniNameString, FILE_DEVICE_UNKNOWN, 0, TRUE, &DeviceObject);

if(!NT_SUCCESS(status)) return status;

DeviceExtension = DeviceObject->DeviceExtension;

status = IoCreateSymbolicLink( &uniDOSString, &uniNameString );

...............


return STATUS_SUCCESS;
}

我如果把ABCDE改成了可以动态增加的,那我怎么注册为自动啊?我的注册过程是这样的


const char DRIVER_NAME[]  = "ABCDE";
const char DISPLAY_NAME[] = "ABCDE Driver";
const char DRIVER_GROUP[] = "SST miniport drivers";

void CABCDEInstallDlg::OnBtnInstall()
{
   DWORD dwStatus = 0;
   SC_HANDLE hSCMan;
   SC_HANDLE hService;

   CString DriverPath = ".......\\ABCDE.SYS";

   hSCMan = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

   if (hSCMan!=NULL)
   {
      hService=OpenService(hSCMan, DRIVER_NAME, SERVICE_QUERY_STATUS);
      if (hService!=NULL)
      {
         CloseServiceHandle(hService);
         CloseServiceHandle(hSCMan);
         return;
      }

      hService=CreateService(
                  hSCMan,
                  DRIVER_NAME,
                  DISPLAY_NAME,
                  SERVICE_ALL_ACCESS,
                  SERVICE_KERNEL_DRIVER,
                  SERVICE_AUTO_START,
                  SERVICE_ERROR_NORMAL,
                  DriverPath,
                  DRIVER_GROUP,
                  NULL, NULL, NULL, NULL);
      if (hService==NULL)
         dwStatus=GetLastError();
      else
         CloseServiceHandle(hService);

      CloseServiceHandle(hSCMan);
   }
   else
      dwStatus=GetLastError();
}

arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-10-14 12:14
仔细看看IoCreateDevice的参数
LittleCoffee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-22
  • 最后登录2007-10-03
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-10-14 12:57
我看了 但没看出什么来 能再提示一下吗? 我是新手 对这个实在不熟 但马上就要做出来的 来不及啃书了 还望大侠们帮个忙 谢谢
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2004-10-14 13:25
倒数第二个
LittleCoffee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-22
  • 最后登录2007-10-03
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-10-14 13:46
楼上的 谢谢 终于搞定了 :)
LittleCoffee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-22
  • 最后登录2007-10-03
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-10-14 13:50
我给分了 可以系统说:"你不是此帖的起帖人或此帖已经给分!
" 这是怎么回事??
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
8楼#
发布于:2004-10-14 15:26
看你自己是否同意EXCLUSIVE吧.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
LittleCoffee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-22
  • 最后登录2007-10-03
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-10-14 16:12
不懂楼上的意思 是我没设置什么东西所以不能给分吗?
LittleCoffee
驱动牛犊
驱动牛犊
  • 注册日期2002-11-22
  • 最后登录2007-10-03
  • 粉丝0
  • 关注0
  • 积分40分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-10-14 16:38
麻烦arthurtu和xx_focus到http://www.driverdevelop.com/forum/html_79442.html?1097743033领分

这个贴子我给不了分,不知道为什么
游客

返回顶部