初学、求教关于动态内存的使用?
#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驱动开发技术详解>>求大神指导。。。
[解决办法]
因为字符串常量是存储在静态存储区的 在程序运行阶段是不会改变的
结贴吧
[解决办法]
看代码很仔细么。如果代码运行没问题,那么可以这么理解:
这个不是指针赋值。是结构赋值。编译器应该会将symLinkName的整个结构内容都拷贝到ustrSymLinkName的存储空间里面。当然,ustrSymLinkName里面的PWSTR Buffer域应该是事先分配好的。