domore
驱动中牛
驱动中牛
  • 注册日期2002-04-06
  • 最后登录2008-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1996回复:4

我这样用IoCreateSymbolicLink对吗?

楼主#
更多 发布于:2003-05-03 22:57
NTSTATUS Wdm1AddDevice(IN PDRIVER_OBJECT DriverObject,  IN PDEVICE_OBJECT pdo)
{

DebugPrint(\"Add Device By MyDriver\");
 
NTSTATUS status;
PDEVICE_OBJECT fdo;
UNICODE_STRING DevName;

   status = IoCreateDevice (DriverObject,
sizeof(WDM1_DEVICE_EXTENSION),
NULL,
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&fdo);
if( !NT_SUCCESS(status))
return status;

PWDM1_DEVICE_EXTENSION dx = (PWDM1_DEVICE_EXTENSION)fdo->DeviceExtension;
dx->fdo = fdo;

status = IoRegisterDeviceInterface(pdo, &WDM1_GUID, NULL, &dx->ifSymLinkName);
if( !NT_SUCCESS(status))
{
IoDeleteDevice(fdo);
return status;
}
IoSetDeviceInterfaceState(&dx->ifSymLinkName, TRUE);

    RtlInitUnicodeString(&DevName, L\"\\\\DosDevice\\\\SZMDev0\");

status = IoCreateSymbolicLink( &DevName, &dx->ifSymLinkName );

    if (NT_SUCCESS(status))
{              
        DebugPrint(\" ERROR! cannot creat a symboliclink name \");
}
else
DebugPrint(\"success create a symboliclink name\");

    DebugPrint(\"the devname is %T\",&DevName);

DebugPrint(\"ifSymbolicLinkName is %T\",&dx->ifSymLinkName);

dx->NextStackDevice = IoAttachDeviceToDeviceStack(fdo,pdo);

fdo->Flags |= DO_BUFFERED_IO|DO_POWER_PAGABLE;
fdo->Flags &= ~DO_DEVICE_INITIALIZING;

return STATUS_SUCCESS;
}

status = IoCreateSymbolicLink( &DevName, &dx->ifSymLinkName ); 运行结果status没有返回STATUS_SUCCESS。这是为什么呢?我这样用对吗?

arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-05-03 23:32
  status = IoCreateDevice (DriverObject,
sizeof(WDM1_DEVICE_EXTENSION),
NULL,
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&fdo);
--------------没有device name?

    RtlInitUnicodeString(&DevName, L\"\\\\DosDevice\\\\SZMDev0\");
--------------你这是device name?symbol link name吧?
RtlInitUnicodeString(&strDeviceName, L\"\\\\Device\\\\DeviceName\");
RtlInitUnicodeString(&strSymbName, L\"\\\\DosDevices\\\\SymbName\");//是DosDevices
  

status = IoCreateSymbolicLink( &DevName, &dx->ifSymLinkName );
--------------第一个是symbol link name,第二个是device name
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-05 23:52
WDM不使用IOCREATESYMBOLICLINK. 符合WDM规范的DRIVER使用PNP MANAGER的IoRegisterDeviceInterface/IoSetDeviceInterfaceState来处理SYMBOLIC LINK.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
domore
驱动中牛
驱动中牛
  • 注册日期2002-04-06
  • 最后登录2008-04-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-06 09:26
感谢arthurtu的帮助,程序现在已经可以正常工作。主要原因在于我对有些概念的理解不对。表示感谢!
也感谢lu0老大的提示!我是初学,两种方法都想试试。以后肯定用你说的那种方法。

kono1980
驱动牛犊
驱动牛犊
  • 注册日期2003-04-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-05-16 00:17
这对我们这些初学者很有提示
游客

返回顶部