我正在尝试将缓冲区数据写入 SCSI 设备,但是当我触发 deviceIoControl 调用时,我收到 Windows 错误代码 183。错误代码指示文件已退出,但我无法理解与 IOCTL 调用相关的错误。
CreateFile 函数通过,因为我能够获得适当的设备句柄,如下所示。
int devHandle = DeviceIoControlHelper.CreateFile( deviceName, DeviceIoControlHelper.GENERIC_READ | DeviceIoControlHelper.GENERIC_WRITE, DeviceIoControlHelper.FILE_SHARE_READ | DeviceIoControlHelper.FILE_SHARE_WRITE, IntPtr.Zero, DeviceIoControlHelper.OPEN_EXISTING, Inttr.0Z
但是,当我尝试写入缓冲区时,出现错误:
dwReturned = 0;
int b = DeviceIoControlHelper.DeviceIoControl(
devHandle,
DeviceIoControlHelper.IOCTL_SCSI_PASS_THROUGH,
inpBuffer,
(uint)Marshal.SizeOf(info),
inpBuffer, //out pDriveLayout,
(uint)Marshal.SizeOf(info), //(uint)Marshal.SizeOf(typeof(DRIVE_LAYOUT_INFORMATION_EX)),
out dwReturned,
IntPtr.Zero);
Log.Write(Log.TraceLevel_5,"ExecuteDeviceIoControl return pass_through scsistatus = " + info.spt.ScsiStatus);
if (b == 0)
{
int win_err = this.GetWindowsErrorCode();
Log.Write(Log.TraceLevel_5, "ExecuteDeviceIoControl failed, error = " + win_err);
LogMyTrace.Write(LogMyTrace.TraceLevel_5, "ExecuteDeviceIoControl failed, error = " + win_err);
this.CloseOpenHandle(devHandle); …Run Code Online (Sandbox Code Playgroud) 我试图了解“perf”输出中“cycles”事件的复用和缩放。
以下是 perf 工具的输出:
144094.487583 task-clock (msec) # 1.017 CPUs utilized
539912613776 instructions # 1.09 insn per cycle (83.42%)
496622866196 cycles # 3.447 GHz (83.48%)
340952514 cache-misses # 10.354 % of all cache refs (83.32%)
3292972064 cache-references # 22.854 M/sec (83.26%)
144081.898558 cpu-clock (msec) # 1.017 CPUs utilized
4189372 page-faults # 0.029 M/sec
0 major-faults # 0.000 K/sec
4189372 minor-faults # 0.029 M/sec
8614431755 L1-dcache-load-misses # 5.52% of all L1-dcache hits (83.28%)
156079653667 L1-dcache-loads # 1083.223 M/sec (66.77%)
141.622640316 seconds …Run Code Online (Sandbox Code Playgroud) 我有两个 Select 查询。
第一个 Select 查询给出了具有两列的输出,即。
A B
------
1 2
3 4
5 6
7 8
Run Code Online (Sandbox Code Playgroud)
第二个 Select 查询给出的输出为两列,即 B 列和 C 列。此 select 语句的 B 列中的所有值都与第一个 Select 语句的 B 列的值匹配。
B C
------
2 25
4 50
6 30
8 50
Run Code Online (Sandbox Code Playgroud)
现在,我需要合并上述两个 Select 查询的输出。IE
A B C
----------
1 2 25
3 4 50
5 6 30
7 8 50
Run Code Online (Sandbox Code Playgroud)
我不能使用视图来存储两个选择查询的输出。我需要在两个选择查询中使用 B 列进行合并。但是,我不知道如何去做。