Sí, hay algún intento por hacer descompiladores. Pero sólo son intentos. No hacen más que guiar en el proceso, que tiene que hacer el usuario casi en su totalidad a mano.
En teoría pasar algo de 32 bits a 64 es fácil. La única diferencia entre algo a 32 bits o 64 es la longitud de los datos, los que varíen de longitud, claro, dado que los códigos de operación del procesador son exactamente los mismos (con esto quedaría aclarado aquello tan discutido de si ocupa más memoria un programa a 32 bits que a 64 o no). Así que sólo habría que cambiar el flag del archivo que determina si el código está en 32 bits o 64, ir viendo qué datos cambian de longitud, añadir los bytes que hagan falta, quitar los que sobran, escribir los datos que deban tener..., en la práctica, imposible.
Otra manera es desensamblando. En teoría muy fácil también. Coges el IDA, le das el driver, lo desensambla, le das el *.asm a un ensamblador, le pones que ensamble a 64 bits y ya está.
El primer problema es que si coges el IDA y desensamblas algo, en el menú View, abajo del todo tienes el Problems, que si le das con el ratón te saldrá una ventana con una lista de problemas, que suele ser bastante larga hasta con un programita hecho por ti. Esos problemas son partes del código que el IDA no ha sabido cómo desensamblar, no sabe qué es, si es código, qué código, o sólo datos, o nada, o qué. Así que al *.asm resultante le faltan cosas. Eso es así en primer lugar porque los compiladores ocultan el código máquina que generan, lo hacen de tal manera que un desensamblador no acaba de enterarse de cómo va el asunto. Sólo queda claro cuando se ejecuta. Cuando lo ejecuta la cpu no hay problema, pero un desensamblador no va ejecutando, sólo interpretando, y los datos que desensambla no son los mismos que los que luego se ejecutan. Y a los embrollos que mete el compilador hay que añadir los que meta el desarrollador del software, que suelen ser más gordos.
Y aunque consigas un *.asm que funcione, la diferencia entre un sistema operativo a 32 bits y otro a 64 no son sólo los bits, y menos entre un xp y un vista por ejemplo. La capacidad de abstracción de un driver está entre 0 y menos todavía, y el api interno, el que maneja un driver, de un sistema operativo y el de otro sacado 3 meses después no es idéntico. Así que tendrías que ir cambiando las llamadas al api del sistema operativo de 32 bits por las del de 64. Y aunque consigas cabiar todas las llamadas al api, en el caso del windows tendrías que compilarlo con el vc, no con un ensamblador cualquiera, que es lo único que produce drivers para windows.
Entonces, ¿es posible coger un driver para 32 bits y hacer otro a 64? Sí. Sabiendo mucho de arquitectura del ordenador, del sistema operativo y del aparato para los que tiene que funcionar el driver, puedes ir viendo qué hace el de 32 con un debugger para drivers, windbg mismamente, y cuando lo tengas claro escribir un código que haga lo mismo, con las llamadas al api correctas, y compilarlo a 64 bits.
La ilegalidad está en el fin que se persigue más que en la acción ejecutada. Así que, si es para sacar un driver a 64 bits, nadie va a decirte nada por hacer ingeniería inversa. Si lo consigues igual hasta te da una propinilla el fabricante del aparato. No serías el primero al que se la dan.