首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

初学、求教关于动态内存的施用

2013-01-11 
初学、求教关于动态内存的使用?#pragma INITCODENTSTATUS CreateDevice(IN PDRIVER_OBJECT pDriverObject){

初学、求教关于动态内存的使用?


#pragma INITCODE
NTSTATUS CreateDevice(IN PDRIVER_OBJECT pDriverObject)
{
//创建设备名称
UNICODE_STRING devName;
RtlInitUnicodeString(&devName,L"\\Device\\MyFileDevice");//这里据我了解是初始化局部内存,然后#pragma INITCODE会因为这段卸载局部内存。IoCreateDevice书上都是这么写,那就是正常工作,但我新手,如果遇到别的函数如何区别下呢。。。

//创建设备
status = IoCreateDevice(pDriverObject,sizeof(DEVICE_EXTENSION),&devName,
FILE_DEVICE_UNKNOWN,
0,TRUE,
&pDevObj);



         ......


         pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension; 
  pDevExt->pDevice = pDevObj;
pDevExt->ustrDeviceName = devName;

//创建符号链接
UNICODE_STRING symLinkName;
RtlInitUnicodeString(&symLinkName,L"\\??\\HelloDDK");
//这里是局部内存,一会儿难道不会释放吗?
pDevExt->ustrSymLinkName = symLinkName;

我看的是张帆的<<Windows驱动开发技术详解>>求大神指导。。。







[解决办法]
因为字符串常量是存储在静态存储区的 在程序运行阶段是不会改变的
结贴吧
[解决办法]
引用:
//这里是局部内存,一会儿难道不会释放吗?
    pDevExt->ustrSymLinkName = symLinkName;

看代码很仔细么。如果代码运行没问题,那么可以这么理解:
这个不是指针赋值。是结构赋值。编译器应该会将symLinkName的整个结构内容都拷贝到ustrSymLinkName的存储空间里面。当然,ustrSymLinkName里面的PWSTR  Buffer域应该是事先分配好的。

热点排行