elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Modificar estalibrería para adaptarlo a los nuevos tiempos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Modificar estalibrería para adaptarlo a los nuevos tiempos  (Leído 1,557 veces)
Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Modificar estalibrería para adaptarlo a los nuevos tiempos
« en: 7 Diciembre 2015, 01:07 am »

Hola:

En esta Web podemos descargar las librerías del puerto paralelo, son del año vete a saber. Como hobby, recuperamos equipos viejos inclusos portátiles con puerto paralelo. En un PC de sobremesa, hay placas que no te vienen puerto paralelo dentro de la placa, otras si pero no por detrás. Para controlar puerto paralelo integrado en la placa con la librería, aquí hay un tutorial y funciona bien, no para las tarjetas PCI.

Si consigues una tarjeta PCI con puerto paralelo, estas librerís no sirven, te da unpantallazo azul, según me cuentan algunas personas de Internet. La dirección física que te da en la BIOS es para la placa integrada, las que no tienen puerto LTP p puierto paralelo, al poner una tarjeta PCI, si usas la misma dirección es cuando se cuelga Windows, pantalla azul. Así que tienes que poner el que te diga los driver en Adimistrador de dispositivos de la tarjeta PCI.

Tarjeta PIC puerto paralelo:


Librerías para puerto paralelo y código fuente:
http://logix4u.net/parallel-port/26-inpoutx64dll-for-win-xp-64-bit

Tengo Visual Studio Community 2015 para usarlo en 64 bits, momdificar dicha librería, antes que nada, como no se mucho el C++, esoy pescando, he estado mirando archivos por archivos en el código fuente a ver si encuentro alguna parte de cambiar la dirección que yo quiera.

El más largo es este llamado intout32drv.dll.
Código
  1. // inpout32drv.cpp : Defines the entry point for the DLL application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "hwinterfacedrv.h"
  6. #include "resource.h"
  7. #include "conio.h"
  8. #include "stdlib.h"
  9.  
  10. int inst(LPCTSTR pszDriver);
  11. int start(LPCTSTR pszDriver);
  12.  
  13. //First, lets set the DRIVERNAME depending on our configuraiton.
  14. #define DRIVERNAMEx64 "hwinterfacex64\0"
  15. #define DRIVERNAMEi386 "hwinterface\0"
  16.  
  17. char str[10];
  18. int vv;
  19.  
  20. HANDLE hdriver=NULL;
  21. char path[MAX_PATH];
  22. HINSTANCE hmodule;
  23. SECURITY_ATTRIBUTES sa;
  24. int sysver;
  25.  
  26. int Opendriver(BOOL bX64);
  27. void Closedriver(void);
  28.  
  29. BOOL APIENTRY DllMain( HINSTANCE  hModule,
  30.  DWORD  ul_reason_for_call,
  31.  LPVOID lpReserved
  32.  )
  33. {
  34.  
  35. hmodule = hModule;
  36. switch(ul_reason_for_call)
  37. {
  38. case DLL_PROCESS_ATTACH:
  39. sysver = SystemVersion();
  40. if(sysver==2)
  41. {
  42. Opendriver(IsXP64Bit());
  43. }
  44. break;
  45. case DLL_PROCESS_DETACH:
  46. if(sysver==2)
  47. {
  48. Closedriver();
  49. }
  50. break;
  51. }
  52. return TRUE;
  53. }
  54.  
  55. /***********************************************************************/
  56.  
  57. void Closedriver(void)
  58. {
  59. if (hdriver)
  60. {
  61. OutputDebugString("Closing driver...\n");
  62. CloseHandle(hdriver);
  63. hdriver=NULL;
  64. }
  65. }
  66.  
  67. void _stdcall Out32(short PortAddress, short data)
  68. {
  69.  
  70. switch(sysver)
  71. {
  72. case 1:
  73. #ifdef _M_IX86
  74. _outp( PortAddress,data); //Will ONLY compile on i386 architecture
  75. #endif
  76. break;
  77. case 2:
  78. unsigned int error;
  79. DWORD BytesReturned;        
  80. BYTE Buffer[3];
  81. unsigned short * pBuffer;
  82. pBuffer = (unsigned short *)&Buffer[0];
  83. *pBuffer = LOWORD(PortAddress);
  84. Buffer[2] = LOBYTE(data);
  85.  
  86. error = DeviceIoControl(hdriver,
  87. IOCTL_WRITE_PORT_UCHAR,
  88. &Buffer,
  89. 3,
  90. NULL,
  91. 0,
  92. &BytesReturned,
  93. NULL);
  94. break;
  95. }
  96.  
  97.  
  98. }
  99.  
  100. /*********************************************************************/
  101.  
  102. short _stdcall Inp32(short PortAddress)
  103. {
  104. BYTE retval(0);
  105. switch(sysver)
  106. {
  107. case 1:
  108. #ifdef _M_IX86
  109. retval = _inp(PortAddress);
  110. #endif
  111. return retval;
  112. break;
  113. case 2:
  114. unsigned int error;
  115. DWORD BytesReturned;
  116. unsigned char Buffer[3];
  117. unsigned short * pBuffer;
  118. pBuffer = (unsigned short *)&Buffer;
  119. *pBuffer = LOWORD(PortAddress);
  120. Buffer[2] = 0;
  121. error = DeviceIoControl(hdriver,
  122. IOCTL_READ_PORT_UCHAR,
  123. &Buffer,
  124. 2,
  125. &Buffer,
  126. 1,
  127. &BytesReturned,
  128. NULL);
  129.  
  130. return((int)Buffer[0]);
  131.  
  132. break;
  133. }
  134. return 0;
  135. }
  136.  
  137. /*********************************************************************/
  138.  
  139. int Opendriver(BOOL bX64)
  140. {
  141. OutputDebugString("Attempting to open InpOut driver...\n");
  142.  
  143. char szFileName[MAX_PATH] = {NULL};
  144. if (bX64)
  145. strcpy_s(szFileName, MAX_PATH, "\\\\.\\hwinterfacex64"); //We are 64bit...
  146. else
  147. strcpy_s(szFileName, MAX_PATH, "\\\\.\\hwinterface"); //We are 32bit...
  148.  
  149. hdriver = CreateFile(szFileName,
  150. GENERIC_READ | GENERIC_WRITE,
  151. 0,
  152. NULL,
  153. OPEN_EXISTING,
  154. FILE_ATTRIBUTE_NORMAL,
  155. NULL);
  156.  
  157. if(hdriver == INVALID_HANDLE_VALUE)
  158. {
  159. if(start(bX64 ? DRIVERNAMEx64 : DRIVERNAMEi386))
  160. {
  161. inst(bX64 ? DRIVERNAMEx64 : DRIVERNAMEi386);
  162. start(bX64 ? DRIVERNAMEx64 : DRIVERNAMEi386);
  163.  
  164. hdriver = CreateFile(szFileName,
  165. GENERIC_READ | GENERIC_WRITE,
  166. 0,
  167. NULL,
  168. OPEN_EXISTING,
  169. FILE_ATTRIBUTE_NORMAL,
  170. NULL);
  171.  
  172. if(hdriver != INVALID_HANDLE_VALUE)
  173. {
  174. OutputDebugString("Successfully opened ");
  175. OutputDebugString(bX64 ? DRIVERNAMEx64 : DRIVERNAMEi386);
  176. OutputDebugString(" driver");
  177. return 0;
  178. }
  179. }
  180. return 1;
  181. }
  182. OutputDebugString("Successfully opened ");
  183. OutputDebugString(bX64 ? DRIVERNAMEx64 : DRIVERNAMEi386);
  184. OutputDebugString(" driver");
  185. return 0;
  186. }
  187.  
  188. /***********************************************************************/
  189. int inst(LPCTSTR pszDriver)
  190. {
  191. char szDriverSys[MAX_PATH];
  192. strcpy_s(szDriverSys, MAX_PATH, pszDriver);
  193. strcat_s(szDriverSys, MAX_PATH, ".sys\0");
  194.  
  195. SC_HANDLE  Mgr;
  196. SC_HANDLE  Ser;
  197. GetSystemDirectory(path , sizeof(path));
  198. HRSRC hResource = FindResource(hmodule, MAKEINTRESOURCE(IDR_BIN1), "bin");
  199. if(hResource)
  200. {
  201. HGLOBAL binGlob = LoadResource(hmodule, hResource);
  202.  
  203. if(binGlob)
  204. {
  205. void *binData = LockResource(binGlob);
  206.  
  207. if(binData)
  208. {
  209. HANDLE file;
  210. strcat_s(path, sizeof(path), "\\Drivers\\");
  211. strcat_s(path, sizeof(path), szDriverSys);
  212.  
  213. file = CreateFile(path,
  214. GENERIC_WRITE,
  215. 0,
  216. NULL,
  217. CREATE_ALWAYS,
  218. 0,
  219. NULL);
  220.  
  221. if(file)
  222. {
  223. DWORD size, written;
  224.  
  225. size = SizeofResource(hmodule, hResource);
  226. WriteFile(file, binData, size, &written, NULL);
  227. CloseHandle(file);
  228.  
  229. }
  230. }
  231. }
  232. }
  233.  
  234. Mgr = OpenSCManager (NULL, NULL,SC_MANAGER_ALL_ACCESS);
  235. if (Mgr == NULL)
  236. { //No permission to create service
  237. if (GetLastError() == ERROR_ACCESS_DENIED)
  238. {
  239. return 5;  // error access denied
  240. }
  241. }
  242. else
  243. {
  244. char szFullPath[MAX_PATH] = "System32\\Drivers\\\0";
  245. strcat_s(szFullPath, MAX_PATH, szDriverSys);
  246. Ser = CreateService (Mgr,                      
  247. pszDriver,                        
  248. pszDriver,                        
  249. SERVICE_ALL_ACCESS,                
  250. SERVICE_KERNEL_DRIVER,            
  251. SERVICE_SYSTEM_START,              
  252. SERVICE_ERROR_NORMAL,              
  253. szFullPath,  
  254. NULL,                              
  255. NULL,                              
  256. NULL,                              
  257. NULL,                              
  258. NULL                              
  259. );
  260. }
  261. CloseServiceHandle(Ser);
  262. CloseServiceHandle(Mgr);
  263.  
  264. return 0;
  265. }
  266. /**************************************************************************/
  267. int start(LPCTSTR pszDriver)
  268. {
  269. SC_HANDLE  Mgr;
  270. SC_HANDLE  Ser;
  271.  
  272. Mgr = OpenSCManager (NULL, NULL,SC_MANAGER_ALL_ACCESS);
  273.  
  274. if (Mgr == NULL)
  275. { //No permission to create service
  276. if (GetLastError() == ERROR_ACCESS_DENIED)
  277. {
  278. Mgr = OpenSCManager (NULL, NULL,GENERIC_READ);
  279. Ser = OpenService(Mgr,pszDriver,GENERIC_EXECUTE);
  280. if (Ser)
  281. {    // we have permission to start the service
  282. if(!StartService(Ser,0,NULL))
  283. {
  284. CloseServiceHandle (Ser);
  285. return 4; // we could open the service but unable to start
  286. }
  287.  
  288. }
  289.  
  290. }
  291. }
  292. else
  293. {// Successfuly opened Service Manager with full access
  294. Ser = OpenService(Mgr,pszDriver,GENERIC_EXECUTE);
  295. if (Ser)
  296. {
  297. if(!StartService(Ser,0,NULL))
  298. {
  299. CloseServiceHandle (Ser);
  300. return 3; // opened the Service handle with full access permission, but unable to start
  301. }
  302. else
  303. {
  304. CloseServiceHandle (Ser);
  305. return 0;
  306. }
  307. }
  308. }
  309. return 1;
  310. }

No quiere decir que sea ese precisamente.

¿Alguna ayuda?

Saludos.
Un cordial saludo.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines