Que las funciones de la api para instalar un controlador de sistema de archivos en Windows?

StackOverflow https://stackoverflow.com/questions/499359

  •  20-08-2019
  •  | 
  •  

Pregunta

Quiero instalar un controlador para las particiones Ext2 en Windows XP, la instalación se hará con un auto escrito Inno script de Instalación.Que las funciones de la API necesito llamar para esto?Por lo que he buscado en google hasta ahora no me parecen necesitar un archivo inf, y por lo tanto no hay ninguna llamada a SetupCopyOEMInf.Pero no sé qué hacer en lugar de...

Por favor me ilumine!

¿Fue útil?

Solución

Como preguntó qué funciones de API son necesarias para instalar un controlador, aquí hay un código que uso para cargar un controlador en C:

bool LoadDriver( const char * cpDriverPath, const char * cpDriverName )
{
    SC_HANDLE hSCService;
    SC_HANDLE hSCManager;

    hSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
    if( hSCManager == NULL )
        return false;

    hSCService = CreateService( hSCManager, cpDriverName, cpDriverName,
                                SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,
                                SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,
                                cpDriverPath, NULL, NULL, NULL, NULL, NULL );

    if( hSCService == NULL && GetLastError() == ERROR_SERVICE_EXISTS )
        hSCService = OpenService( hSCManager, cpDriverName, SERVICE_ALL_ACCESS );

    if( hSCService == NULL )
        return false;

    if( !StartService( hSCService, 0, NULL ) )
    {
        if( GetLastError() != ERROR_SERVICE_ALREADY_RUNNING )
            return false;
    }

    CloseServiceHandle( hSCManager );
    CloseServiceHandle( hSCService );

    return true;
}

Probablemente desee utilizar SERVICE_ BOOT_ START para un controlador del sistema de archivos en lugar de SERVICE_ DEMAND_ START. Si no puede escribir un script de Inno para hacer lo anterior, siempre puede hacer un pequeño EXE a partir de lo anterior y hacer que Inno lo ejecute como una instalación posterior.

Si desea seguir la ruta INF, consulte este artículo de Microsoft .

Otros consejos

Bien, he encontrado algo más de información:

El MSDN los estados que 'usted debe instalar el sistema de archivos de los controladores mediante el uso de un archivo INF' (llamando SetupCopyOEMInf etc), pero también se observa que en Win2k y los sistemas más antiguos, 'controladores del sistema de archivos se instalan generalmente por el Administrador de Control de Servicios'

Y he encontrado otra Ext2 conductor en sourceforge que viene con una Inno Setup script de instalación.Allí se acaba de agregar un par de entradas de registro bajo HKLM\SYSTEM\CurrentControlSet\Services\.

Creo que la adición de estas entradas es igual a la creación de un servicio con el sc.exe la herramienta, que se llama internamente a la OpenSCManager y CreateService la api.Yo prefiero el registro de la forma, porque es más fácil y no veo ninguna ventaja en el uso de las llamadas a la api, ya que un reinicio siempre es necesario.

Así que terminé con esta solución:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\YourService]
"ErrorControl"=dword:00000001
"Start"=dword:00000003
"Type"=dword:00000001
"DisplayName"="YourServiceDisplayName"
"ImagePath"="System32\Drivers\YourService.sys"

Por supuesto, dependiendo de las especificaciones del controlador en cuestión, algunos más entradas en un Parameters subclave puede ser requerido.

Todavía estoy esperando que alguien va a ser capaz de arrojar algo de luz sobre esta cuestión, específicamente algunos detalles sobre cómo utilizar un archivo inf para la instalación, ya que esta es la manera recomendada por la SRA.

Vamos, amigos!Hay una buena recompensa para la captura de aquí!

Hay varias formas de abordar esto.

1 / Vea si el producto tiene un modo de instalación silenciosa (por ejemplo, usando un archivo de configuración para instalar). Luego, simplemente incorpore eso en su propia instalación.

2 / Hay programas que pueden emular a un usuario, como Rational Robot (no lo sugeriría, ya que es comercial, pero es probable que haya otros gratuitos). Principalmente los usamos para pruebas automatizadas de aplicaciones gráficas, pero pueden usarlas con la misma facilidad para ejecutar un instalador.

3 / Póngase en contacto con el desarrollador para ver qué implica el proceso de instalación real, luego cópielo.

4 / Microsoft tiene una serie de herramientas del sistema (aquí) que pueden rastrear los cambios en el sistema de archivos, el registro, etc. Puede utilizarlos para realizar ingeniería inversa en el proceso de instalación y hacer lo mismo en su propia instalación.

Personalmente, iría con el número 3 primero. El desarrollador estará encantado de saber que su producto se está utilizando y puede proporcionar la información fácilmente. Incluso pueden escribirle un instalador silencioso, ya que esto sería un punto de venta adicional para su producto en un entorno corporativo (sugiérales esto).

Escribí un controlador de filtro TDI.

Cuando llegué a escribir el archivo .inf, tardé dos semanas de puro dolor en hacer que algo funcionara y todavía no lo entendía realmente, porque realmente no tenía sentido; lo que tenías que hacer parecía muy arbitrario. Los archivos INF eran, cuando intentaba usarlos, casi completamente indocumentados y extremadamente complejos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top