我不确定这是否会有所帮助,但这里有一些关于如何使用函数本身的示例代码。我几乎使用Microsoft 的 MSDN和Pinvoke来敲出一些快速代码。
[DllImport("setupapi.dll", SetLastError = true)]
public static extern bool SetupCopyOEMInf(
string SourceInfFileName,
string OEMSourceMediaLocation,
OemSourceMediaType OEMSourceMediaType,
OemCopyStyle CopyStyle,
string DestinationInfFileName,
int DestinationInfFileNameSize,
ref int RequiredSize,
string DestinationInfFileNameComponent
);
/// <summary>
/// Driver media type
/// </summary>
internal enum OemSourceMediaType
{
SPOST_NONE = 0,
//Only use the following if you have a pnf file as well
SPOST_PATH = 1,
SPOST_URL = 2,
SPOST_MAX = 3
}
internal enum OemCopyStyle
{
SP_COPY_NEWER = 0x0000004, // copy only if source newer than or same as target
SP_COPY_NEWER_ONLY = 0x0010000, // copy only if source file newer than target
SP_COPY_OEMINF_CATALOG_ONLY = 0x0040000, // (SetupCopyOEMInf only) don't copy INF--just catalog
}
static void Main(string[] args)
{
//Not really needed but I couldn't figure out how to not specify a ref parameter
int size = 0;
bool success = SetupCopyOEMInf("source.inf", "", OemSourceMediaType.SPOST_NONE, OemCopyStyle.SP_COPY_NEWER, null, 0,
ref size, null);
if(!success)
{
var errorCode = Marshal.GetLastWin32Error();
var errorString = new Win32Exception(errorCode).Message;
Console.WriteLine(errorString);
Console.ReadLine();
}
}
假设您的 INF 文件在指定的正确目标目录下完全正确,此函数还将尝试将您通过 CopyFiles 指令(在 INF 文件中)指定的任何文件复制到这些目标目录。如果该文件不存在,该命令将失败。
我遇到的另一个问题是该函数应该将您的 INF 和 CAT 文件复制到指定的目标目录(我指定了一个 ID 为 12,记录为 %windir%\system32\drivers),而是将其复制到了 %windir% \system32\DriverStore\FileRepository\source.inf_amd64_neutral_blah。这可能是因为我正在使用手动创建的 inf 文件进行测试并且缺少所需的信息。
希望这对您有所帮助:)