我编写了下面的代码,将0xFF写入USB存储设备上的所有字节.由于某种原因,WriteFile()调用在扇区242开始出错.我在两个独立的USB存储设备上完成了这个操作,然后在十六进制编辑器中检查设备.扇区242似乎是FAT16格式化设备上文件分配表的开始,以及NTFS设备上引导区域的开始.我确信它在这些确切的位置错误并不是巧合,但是我不知道如何改变这种行为.我在WriteFile失败时收到的HRESULT是-2147024891,即E_ACCESSDENIED.有谁知道可能导致问题的原因是什么?
注意:如果您要在本地系统上运行此代码,请非常小心,因为我已经硬编码了USB设备的物理设备ID.请务必使用您尝试写入的设备更新deviceId变量.你不想破坏你的硬盘.
public enum EMoveMethod : uint
{
Begin = 0,
Current = 1,
End = 2
}
[DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern uint SetFilePointer([In] SafeFileHandle hFile, [In] long lDistanceToMove, [Out] out int lpDistanceToMoveHigh, [In] EMoveMethod dwMoveMethod);
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
static extern SafeFileHandle CreateFile(string lpFileName, uint dwDesiredAccess, uint dwShareMode, IntPtr lpSecurityAttributes, uint dwCreationDisposition, uint dwFlagsAndAttributes, IntPtr hTemplateFile);
[DllImport("kernel32", SetLastError = true)]
internal extern static int ReadFile(SafeFileHandle handle, byte[] bytes, int numBytesToRead, out …Run Code Online (Sandbox Code Playgroud) 我有一个SQL查询(对于SQL Server 2008 R2)需要很长时间才能完成.我想知道是否有更好的方法吗?
SELECT @count = COUNT(Name)
FROM Table1 t
WHERE t.Name = @name AND t.Code NOT IN (SELECT Code FROM ExcludedCodes)
Run Code Online (Sandbox Code Playgroud)
Table1中有大约90万行,并由Name和Code索引.ExcludedCodes只有大约30行.
这个查询在一个存储过程中被调用大约40k次,程序完成所需的总时间是27分钟.我相信这是我最大的瓶颈,因为它查询了大量的行和次数它做到了.
因此,如果您知道优化此方法的好方法,我们将不胜感激!如果它无法优化那么我想我坚持了27分钟......
编辑
我改变了NOT IN,以NOT EXISTS它削减时间降低到10:59,让孤独是我的一个巨大的增益.我仍然会尝试按照下面的建议进行group by语句,但是这需要完全重写存储过程并且可能需要一些时间......(正如我之前所说,我不是最好的SQL,但它正在启动在我身上成长.^^)
我正在使用 WinPCapDevice 并且已经对其进行了初始化。我只是希望能够从该设备获取 IP,但我无法在任何地方找到如何提取设备的 IP 地址。如果没有办法做到这一点,那么是否有另一种方法来获取 WinPCapDevice 的 IP 地址,以便我可以根据 IP 地址列表对其进行检查?
这是我正在谈论的一小段代码。
IPHostEntry host;
host = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ip in host.AddressList)
{
if (ip.AddressFamily.ToString() == "InterNetwork")
{
localIPAddress = ip.ToString();
//Want to check if my WinPCapDevice device's IP is equal to ip
}
}
Run Code Online (Sandbox Code Playgroud) 所以我有一个非常基本的 openssl 命令提供给我openssl smime -encrypt -binary -aes-256-cbc -in $inPath -out $encryptedPath -outform DER $pubCert,这个命令也可以正常工作并输出一个加密文件。我需要在 java 应用程序中使用此命令的等效项,最好不要调用进程并使用 openssl 本身(只是因为我觉得这可能是不好的做法)。
我已经研究了很多,似乎没有任何等效的东西可以找到。我尝试了几件事,但大多数似乎都不起作用。奇怪的是......我能够使用我编写的代码获得一个简单的“Hello World”字符串来加密(尽管我不相信它会正确加密它,因为我将密码设置为“RSA”而不是“ AES") 但是当字节数组来自一个文件时,它默默地失败了,只写了 0 个字节。现在这就是我的代码的样子。
Cipher aes = Cipher.getInstance("RSA");
CertificateFactory certF = CertificateFactory.getInstance("X.509");
File public_cert = new File( getClass().getClassLoader().getResource("public.crt").getFile());
FileInputStream certIS = new FileInputStream(public_cert);
X509Certificate cert = (X509Certificate) certF.generateCertificate(certIS);
certIS.close();
aes.init(Cipher.ENCRYPT_MODE, cert);
File tarGz = new File("C:\\volatile\\generic.tar.gz");
FileInputStream fis = new FileInputStream(tarGz);
byte[] tarGzBytes = FileUtils.readFileToByteArray(tarGz);
tarGzBytes = "Hello World".getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream("Hello World".getBytes());
File encFile = …Run Code Online (Sandbox Code Playgroud) c# ×2
certificate ×1
encryption ×1
file-io ×1
java ×1
openssl ×1
optimization ×1
sharppcap ×1
sql ×1
t-sql ×1