我有一个 ASP.NET 应用程序,它在加载页面时卡住了(什么都没发生,没有超时,什么都没有)。在 procmon 中,我看到 default.aspx 的 QueryInformationVolume 和 QueryAllInformationFile 发生了 BUFFER OVERFLOW。我该如何找出发生了什么?
编辑:添加示例行
23:11.7 w3wp.exe 8648 QueryInformationVolume D:\www\AppName\Default.aspx BUFFER OVERFLOW VolumeCreationTime:2007 年 11 月 8 日上午 9:18:37,VolumeSerialNumber:AA05-4B19,SupportsObjects:True,VolumeLabel:DAT؛ 23:11.7 w3wp.exe 8648 QueryAllInformationFile D:\www\AppName\Default.aspx BUFFER OVERFLOW CreationTime:2008 年 9 月 16 日晚上 9:38:26,上次访问时间:2009 年 9 月 2 日上午 10:21:51,上次写入时间:2009 年 8 月 27 日下午 4:49:00,更改时间:2009 年 8 月 27 日下午 4:49:00,FileAttributes:A,AllocationSize:4,096,EndOfFile:644,NumberOfLinks:1,DeletePending:False,目录:False,IndexNumber:0x5a00000002e419,EaSize:0,访问:通用读取,位置:0,模式:,AlignmentRequirement:字节
答案1
缓冲区溢出不算什么。看看Mark Russinovich 的博客以获得解释。
这些错误是否表示存在问题?不,它们是系统表示可用信息多于请求者输出缓冲区所能容纳的信息的标准方式。换句话说,系统告诉调用者,如果复制所有请求的数据,就会溢出缓冲区。因此,错误实际上意味着避免了缓冲区溢出,而不是发生了溢出。
底线是,Filemon 跟踪中的缓冲区溢出错误并不表示存在安全问题,而且通常不是由于编程不当造成的。
答案2
通过调试?
这是您编写的应用程序,还是其他人将其放在您管理的 Web 服务器上?
答案3
我不建议使用 IISRESET,因为它有很多副作用。您是否通过修改 web.config 文件或在 IIS 管理单元本身内停止并重新启动了 AppPool?您能提供有关实际 ASP.NET 应用程序本身的更多信息吗?
QueryInformation 是一个 IRP(I/O 请求包)函数代码。你可以看到这里在 MSDN 上,这是一个文件系统错误。IIS 是否重定向到另一台服务器上的文件共享?文件是否被锁定以进行写入?也许另一个进程/应用程序占用了文件系统,而 IIS 正在等待 Default.aspx。