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

t101706 2012-10-29 04:39:20

#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驱动开发技术详解>>求大神指导。。。






...全文
172 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
曹大夯 2012-10-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
//这里是局部内存,一会儿难道不会释放吗?
pDevExt->ustrSymLinkName = symLinkName;
[/Quote]
看代码很仔细么。如果代码运行没问题,那么可以这么理解:
这个不是指针赋值。是结构赋值。编译器应该会将symLinkName的整个结构内容都拷贝到ustrSymLinkName的存储空间里面。当然,ustrSymLinkName里面的PWSTR Buffer域应该是事先分配好的。
嬡仩巧尅劦 2012-10-31
  • 打赏
  • 举报
回复
采集卡plx pci6140-aa33pc驱动及软件
killvx 2012-10-30
  • 打赏
  • 举报
回复
因为字符串常量是存储在静态存储区的 在程序运行阶段是不会改变的
结贴吧
t101706 2012-10-29
  • 打赏
  • 举报
回复
DeviceName [in, optional]
Optionally points to a buffer containing a null-terminated Unicode string that names the device object. The string must be a full path name. WDM filter and function drivers do not name their device objects. For more information, see Named Device Objects.

Note If a device name is not supplied (that is, DeviceName is NULL), the device object created by IoCreateDevice will not (and cannot) have a discretionary access control list (DACL) associated with it. For additional information, see Security Descriptors.

官网解释没说,这种情况一般都是自己猜么

21,616

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧