Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than setupapi, prefix the name with the module name and a period.
Pointer to a null-terminated string containing the name (and optional path) of the INF file to be opened. If the filename does not contain path separator characters, it is searched for, first in the \inf directory, and then in the \system32 directory. If the filename contains path separator characters, it is assumed to be a full path specification and no further processing is performed on it.
Optional pointer to a null-terminated string containing the class of INF file desired. This string must match the Class value of the Version section (for example, Class=Net). If there is no entry in the Class value, but there is an entry for ClassGUID in the Version section, the corresponding class name for that GUID is retrieved and used for the comparison.
Style of INF file to open or search for. This parameter can be a combination of the following flags: INF_STYLE_OLDNT - a legacy INF file format, INF_STYLE_WIN4 - a Windows INF file format.
Optional pointer to a variable to which this function returns the (1-based) line number where an error occurred during loading of the INF file. This value is generally reliable only if GetLastError does not return ERROR_NOT_ENOUGH_MEMORY. If an out-of-memory condition does occur, ErrorLine may be 0.
Return Value
The function returns a handle to the opened INF file if it is successful. Otherwise, the return value is INVALID_HANDLE_VALUE. Extended error information can be retrieved by a call to GetLastError.
Tips & Tricks:
None.
Sample Code:
string infFile = <INF file full path>;
uint ErrorLine = 0;
IntPtr infHandle = SetupOpenInfFile(infFile, null, INF_STYLE_OLDNT | INF_STYLE_WIN4, out ErrorLine);
int iCode = Marshal.GetLastWin32Error();
if (infHandle.ToInt64() != INVALID_HANDLE_VALUE)
{
Console.WriteLine("INF file was opened successfully.");
INFCONTEXT Context = new INFCONTEXT();
if (SetupFindFirstLine(infHandle, "Manufacturer", null, ref Context) == true)
{
Console.WriteLine("ManufactuOKrers list:");
string manufacturerName = "";
manufacturerName = manufacturerName.PadLeft(256, ' ');
Int32 requiredSize = manufacturerName.Length;
SetupGetStringField(ref Context, 1, manufacturerName, manufacturerName.Length, out requiredSize);
manufacturerName = manufacturerName.Substring(0, requiredSize-1);
Console.WriteLine(manufacturerName);
while(SetupFindNextLine(ref Context, out Context) == true)
{
manufacturerName = manufacturerName.PadLeft(256, ' ');
requiredSize = manufacturerName.Length;
SetupGetStringField(ref Context, 1, manufacturerName, manufacturerName.Length, out requiredSize);
manufacturerName = manufacturerName.Substring(0, requiredSize - 1);
Console.WriteLine(manufacturerName);
}
}
else
{
Console.WriteLine("Can't find [Manufacturer] section.");
}
SetupCloseInfFile(infHandle);
}
else
{
Console.WriteLine("Failed to open INF file. Error code - {0}.", iCode);
if (ErrorLine != 0)
{
Console.WriteLine("Failure line - {0}.", ErrorLine);
}
}
helpful tips or sample code to share for using this API in managed code?
corrections to the existing content?
variations of the signature you want to share?
additional languages you want to include?
Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).