tangsc
驱动牛犊
驱动牛犊
  • 注册日期2003-03-02
  • 最后登录2009-09-14
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望6点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1289回复:1

好人快出现吧

楼主#
更多 发布于:2005-03-16 17:27
98操作系统,中间层驱动程序,
现象:应用程序CreateFile返回错误:系统找不到该文件.
现象2:
VOID
PtBindAdapter(
    OUT PNDIS_STATUS    Status,
    IN  NDIS_HANDLE     BindContext,
    IN  PNDIS_STRING    DeviceName,
    IN  PVOID           SystemSpecific1,
    IN  PVOID           SystemSpecific2)
{
  NDIS_STATUS    err;
  NDIS_HANDLE    ConfigHandle;
  PADAPT         pAdapt;
  UINT           MediumIndex;
  WCHAR          RegPath[256];
  PNDIS_STRING   RegStr = (PNDIS_STRING)SystemSpecific1;
  ANSI_STRING   TempStr;

  DbgPrint(\"PtBindAdapter: %ls\\n\", DeviceName->Buffer);
这里是乱码 PtBindAdapter: __
如果是DbgPrint(\"PtBindAdapter: %ls\\n\", DeviceName);
结果是 PtBindAdapter: ll__


我的程序:
应用程序中:
char SymbolicLink[64];
memset(SymbolicLink,0,sizeof(SymbolicLink));
wsprintf(SymbolicLink, TEXT (\"\\\\\\\\.\\\\MYDEVICE\"));
hDeviceHandle = CreateFile(
SymbolicLink,
GENERIC_WRITE | GENERIC_READ,
0,
NULL,
OPEN_EXISTING,
0,
0);

打开失败.

驱动程序:
#define PPPOE_DEVICE_NAME     L\"\\\\Device\\\\MYDEVICE\"
#define PPPOE_DOS_DEVICE_NAME     L\"\\\\DosDevices\\\\MYDEVICE\"


NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
PDEVICE_OBJECT DeviceObject;
UNICODE_STRING DeviceName;

PDRIVER_DISPATCH DispatchTable[IRP_MJ_MAXIMUM_FUNCTION];
UINT i;

DbgPrint(\"PtRegisterDevice 98\\n\");

NdisAcquireSpinLock(&GlobalLock);

MiniportCount++;

if (MiniportCount == 1)
{
ASSERT(ControlDeviceState != PS_DEVICE_STATE_CREATING);

//
// Another thread could be running PtDeregisterDevice on
// behalf of another miniport instance. If so, wait for
// it to exit.
//
while (ControlDeviceState != PS_DEVICE_STATE_READY)
{
NdisReleaseSpinLock(&GlobalLock);
NdisMSleep(1);
NdisAcquireSpinLock(&GlobalLock);
}

ControlDeviceState = PS_DEVICE_STATE_CREATING;

for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
{
   DispatchTable = PtDispatch;
}

   RtlInitUnicodeString(&DeviceName, PPPOE_DEVICE_NAME);
  RtlInitUnicodeString(&DosDeviceName, PPPOE_DOS_DEVICE_NAME);
Status = IoCreateDevice(
DriverObject,
0,
&DeviceName, FILE_DEVICE_UNKNOWN,
0,
FALSE,
&DeviceObject);

if (Status == NDIS_STATUS_SUCCESS)
{
DbgPrint(\"IoCreateDevice ok\\n\");
DeviceObject->Flags |= DO_DIRECT_IO;
ControlDeviceState = PS_DEVICE_STATE_READY;
}
else
{
DbgPrint(\"Failed to create device object for dispatch handlers\\n\");
ControlDeviceState = PS_DEVICE_STATE_FAILED;
}

   Status = IoCreateSymbolicLink( &DosDeviceName, &DeviceName );
     if (!NT_SUCCESS(Status))    // If we couldn\'t create the link then
{                      
DbgPrint(\"Failed to create device SymbolicLink\\n\");
IoDeleteSymbolicLink(&DosDeviceName);
}
DbgPrint(\"IoCreateSymbolicLink ok:%d\\n\", Status);

}
}
这里
IoCreateDevice
IoCreateSymbolicLink
都成功了


请问:打开应用程序为什么不能调用成功CreateFile呢?


鞠躬了.
tangsc
驱动牛犊
驱动牛犊
  • 注册日期2003-03-02
  • 最后登录2009-09-14
  • 粉丝0
  • 关注0
  • 积分43分
  • 威望6点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-04-01 19:15
好人没有,还是自己回复吧


哈哈,居然是这个问题, 自己给自己一巴掌

没有将dispatch和DriverObjects关连
游客

返回顶部