Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   FileExists() no lee .dll en system32 (https://www.clubdelphi.com/foros/showthread.php?t=83213)

to_to 22-05-2013 22:12:56

FileExists() no lee .dll en system32
 
Buena tarde Foro, tengo el siguiente problema con la función FileExists(nombrearchivo). Busco un archivo con extensión .dll (nombrearchivo.dll), sin embargo la función me regresa (False) que no existe este archivo. Sólo lo hace para archivos que están en esa carpeta (Windows\System32) y con extensión .dll, si busco otro tipo de archivo si lo encuentra. Estoy utilizando Delphi 7, Windows 7 64 Bits. Tengo Avira y Superantispywere. El usuario con el que entro es tipo administrador y tiene permiso de acceso total sobre esta carpeta.

Antes los podía encontrar sin problema. Tuve problemas con el Avast y decidí cambiarlo por Avira, no se si la instalación haya cerrado algún acceso o cambiado la configuración de esta carpeta.

Ya probé habilitando opciones en carpeta "Mostrar archivos de sistema". Si copio este archivo a otra carpeta p.ejemplo System, lo encuentra sin problema pero en System32 no lo identifica.

¿Alguien tiene idea de qué puede ser?

Agradezco alguna ayuda.

Casimiro Notevi 22-05-2013 22:43:39

Está claro que es problema de permisos, tendrás que investigar un poco más con se nuevo programa que has instalado.

escafandra 22-05-2013 23:30:40

No puede probar en Win7 64bits pero he probado en Win7 32bits y la siguiente función funciona Ok.

Código Delphi [-]
function FileExists(const FileName: string): bool;
var
  Handle: THandle;
  FindData: TWin32FindData;
begin
  Handle := FindFirstFile(PChar(FileName), FindData);
  Result := (Handle <> INVALID_HANDLE_VALUE);
  if Result then Windows.FindClose(Handle);
end;

Saludos.

to_to 23-05-2013 00:06:36

Gracias por responder. Pues el programa está en delphi y simplemente lo que hice fue actualizar el proyecto. Voy a probar la solución que planteas escafandra.

Les comento en cuanto tenga resultados.

to_to 23-05-2013 19:36:40

Cargué la función de escafandra pero sigue sin ver a los archivos .dll. Me tendré que pelear con permisos y características de la carpeta.

Gracias por sus comentarios.

olbeup 24-05-2013 16:16:05

Prueba hacer esto:
Mi PC
Menu --> Herramientas, Lengueta [Ver], Busca y desmarca [] Ocultar las extensiones de archivo para tipos de archivo conocidos

Haber si con esto te funciona.

Un saludo.

to_to 24-05-2013 20:03:00

Gracias, tampoco funcionó sigue sin encontrar los archivos .dll en el system32. Sigo buscando permisos o algún bloqueo para esos archivos.

ecfisa 24-05-2013 20:46:14

Cita:

Empezado por to_to (Mensaje 461197)
Gracias, tampoco funcionó sigue sin encontrar los archivos .dll en el system32. Sigo buscando permisos o algún bloqueo para esos archivos.

Hola to_to.

Sólo a fines de prueba y delimitar el motivo, fijate si de este modo te muestra los archivos .dll en el ListBox:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  sr: TSearchRec;
  bSize: DWORD;
  Path : string;
begin
  bSize := GetEnvironmentVariable('ComSpec', nil, 0);
  if bSize = 0  then  Exit;
  SetLength(Path,bSize-1);
  GetEnvironmentVariable('ComSpec', PChar(Path), bSize);
  Path := ExtractFilePath(Path);

  ListBox1.Items.BeginUpdate;
  try
    if FindFirst(Path + '*.DLL', $20, sr) = 0 then
      repeat
        ListBox1.Items.Add(sr.Name);
      until FindNext(sr) <> 0;
      FindClose(sr);
  finally
    ListBox1.Items.EndUpdate;
  end;
end;
Aunque dudo que lo haga si no te resultaron las propuestas anteriores ... :rolleyes:

Saludos. :)

Edito: Acabo de encontrar un enlace que tal vez te sirva revisar: FindNextFile fails on 64-bit Windows?

to_to 24-05-2013 21:36:26

Gracias, lo pruebo y te comento...

nlsgarcia 25-05-2013 04:33:49

to_to,

Cita:

Empezado por to_to
...la función FileExists...archivo con extensión .dll...regresa (False)...Sólo...en...(Windows\System32)...utilizando Delphi 7 y Windows 7 64 Bits...

Cita:

Empezado por to_to
...Antes los podía encontrar sin problema...Tuve problemas con el Avast y decidí cambiarlo por Avira...

Cita:

Empezado por to_to
...El usuario con el que entro es tipo administrador y tiene permiso de acceso total...

Te comento:

1- La función FileExists de Delphi funciona correctamente (Windows\System32) en una Máquina Virtual con Windows 7 Professional x64 y Delphi 7.

2- El código sugerido en los Msg #3 y #8 funciona correctamente (Windows\System32) en una Máquina Virtual con Windows 7 Professional x64 y Delphi 7.

Pregunto:

1- ¿Si deshabilitas el antivirus Avira la función FileExists de Delphi funciona correctamente en Windows\System32?.

2- ¿Después del problema con el antivirus Avast y antes de instalar Avira se presentaba el problema señalado?.

3- ¿El problema solo ocurre después de instalar Avira?.

4- ¿Hay alguna opción en Avira que permita ignorar programas o directorios específicos en su proceso de detección de amenazas?.

Es probable que el problema sea originado en Avira Antivirus por alguna opción de protección del sistema, te sugiero considerar las preguntas anteriores y revisar la configuración del programa en cuestión.

Espero sea útil :)

Nelson.

to_to 25-05-2013 10:12:09

Buenas noches, gracias por contestar.

En cuanto al código de prueba para cargar los archivos en el listbox, curiosamente si carga los .dll pero no el archivo que necesito. Estoy por revisar los permisos o propietario del archivo ya que como lo pasaron, es probable que el usuario propietario no tenga permisos sobre la carpeta del system32. Estoy intentando crear ese mismo archivo (con el mismo nombre) con el usuario que corre la aplicación. Antes de crearlo le otorgaré permisos al usuario con el que estoy probando.

Pregunto:

Cita:

1- ¿Si deshabilitas el antivirus Avira la función FileExists de Delphi funciona correctamente en Windows\System32?.
Fue lo primero que intenté pero siguió sin funcionar. Efectivamente pensé que algo estaba bloqueando o había cambiando permisos de acceso a la carpeta. Lo di de baja y no se resolvió.

Cita:

2- ¿Después del problema con el antivirus Avast y antes de instalar Avira se presentaba el problema señalado?.
Esto no lo pude validar ya que me empezó a detectar que el programa con el que probaba tenía virus, me enfoqué a quitar los virus, incluyendo la desinstalación de Avast y la instalación del Avira. Lo que si estoy seguro es que antes de los problemas de virus funcionaba perfectamente. Pero cuando me pasaron el archivo "infectado" con el Win32 / Alaman, no pude abrirlo más ya que el Avast me lo enviaba a cuarentena.

Cita:

3- ¿El problema solo ocurre después de instalar Avira?.
Aparentemente así es, el Avira detectó nuevamente los virus y limpié archivos. Posteriormente con los archivos des-infectados probé y ya no pude ver más el archivo del system32. Revisé permisos en carpeta y archivos y aparentemente no vi algún cambio.


Cita:

4- ¿Hay alguna opción en Avira que permita ignorar programas o directorios específicos en su proceso de detección de amenazas?.
Tengo el Avira versión libre, he revisado la configuración y no veo ese tipo de bloqueo. De hecho porque al parecer ocurre con un solo tipo de archivo y dentro del system32. Como lo mencioné al principio, en esa misma carpeta si puede localizar y recuperar archivos de otra extensión, y también hice la prueba poniendo el archivo .dll en otra carpeta y si lo lee.

nlsgarcia 25-05-2013 11:32:51

to_to,

Cita:

Nelson : ¿El problema solo ocurre después de instalar Avira?

to_to : Aparentemente así es...
Pregunto:

1- ¿La función FileExists de Delphi falla con todos los archivos .dll en Windows\System32 o solo uno en específico?.

2- ¿Puedes desinstalar el Antivirus Avira y probar si el problema continua?.

Te comento:

1- En el Msg #1 indicas que utilizas un usuario tipo Administrador por lo cual no parece un problema de permisología, si y solo si realmente es un usuario tipo Administrador con acceso total al sistema.

2- Revisa la máquina en cuestión con otro antivirus, te recomiendo NIS 2013 de Symantec para validar que esta libre de Malware.

3- Revisa estos links:
Espero sea útil :)

Nelson.

Casimiro Notevi 25-05-2013 14:00:29

Primero debería probar en otro ordenador que no tenga problemas de virus.

escafandra 26-05-2013 03:42:59

Algunos virus protegen determinados archivos vitales para ellos. Lo hace realizando bien hook a la API o bien desde el Kernel. Si has estado infectado piensa en la posibilidad de seguir estándolo.

Saludos.

MAXIUM 26-05-2013 04:27:00

System32 esta en el PATH del sistema por lo que cualquier ejecutable que coloques ahí, lo puedes invocar desde la línea de comando desde cualquier ruta en forma directa.

Por otra parte, en el FileExists() no coloques la ruta directa, sino que la variable del sistema.

Por ejemplo para la carpeta de Windows sería %windir% lo mismo para system32. Puedes buscar la lista completa en Google colocando variables sistema windows o buscar información sobre como hacerlo mediante WMI.

No se que problemas habras tenido con Avast pero al igual que este, Avira permite excluir el escaneo de archivos o carpetas. Pero no es recomendable para nada hacerlo, ya que los malwares se alojan y "crean" ahí.

Parte desinfectado el sistema:
- Corre CCleaner, tanto archivos como registro de Windows.
- Luego corre Malwarebytes.

to_to 26-05-2013 06:28:21

Gracias por sus ideas y aportes, en verdad que me me están dando más alternativas para encontrar realmente el problema. Tuve que suspender momentáneamente esta parte del desarrollo para continuar con las pruebas, por el momento lo puse en otro directorio y de ahí leo el archivo. Espero mañana retomar este caso para aplicar las opciones que me han dado y encerrar el problema.

to_to 29-05-2013 09:21:37

Hola nuevamente, he realizado lo que me han sugerido y en orden de ideas les comento lo siguiente:

1.- Probé en otro equipo (Win XP, no tengo otro con Win 7) y no tiene problema para localizar el archivo, lo encuentra y lo lee correctamente.

2.- Desinstalé el Avira y continua el mismo problema.

3.- Revisé mi equipo con 4 diferentes antivirus (superantispyware, dr. cureit, mabam, fileassassin) detecté algunos troyanos pero no de gravedad. Quedó limpiecita la lap y además pasé el ccleaner y aún continua el problema.

4.- Modifiqué permisos, asigné control total sobre los archivos que quiero buscar y leer a todos los usuarios y nada.

Ahora bien, si trato de leer la carpeta system32 incluso con otra aplicación que no esté en delphi, tampoco "ve" los archivos en esa carpeta, ve otros archivos .dll pero el que yo creo o modifico no los "ve", con el navegador de windows si se ven. Lo curioso es que cuando paso este archivo a otra carpeta lo "ve" sin problema. Supongo que ha de ser alguna "restricción" o configuración de la seguridad de la carpeta junto con la de los archivos que he copiado ahí.

Agradeceré alguno otra sugerencia.

to_to 29-05-2013 09:37:41

Por otro lado y al determinar que el problema no es la función del fileExists(), no se si sea conveniente continuar este hilo en este foro, por mi parte también he abierto un tema en cuanto a la seguridad y permisos de Win 7 en el foro "infospyware". Si me lo permiten, me gustaría dejar este hilo un poco más de tiempo para determinar el error real y postear aquí la solución que pudiera encontrar.

Gracias nuevamente.

Lepe 29-05-2013 18:49:41

¿no será Windows 7? El archivo que intentas leer, ¿es de la instalación de windows, o bien lo has puesto tú?

Lo pregunto porque en W7, si un programa pone un archivo en windows\system y demás, si no tiene privilegios de administrador, en realidad te lo coloca en c:\users\<nombre usuario>\ en una carpeta oculta. En principio, eso es totalmente transparente a los usuarios, pero quizás tenga algo que ver.

Saludos

to_to 29-05-2013 19:11:22

Es un archivo que yo he creado y lo copié en el windows\system32. Como lo mencioné no tenía ese problema, antes lo podía localizar desde cualquier aplicación. Ahora sólo lo veo en el explorador de windows pero al tratar de recuperar o abrir este archivo desde delphi no es visible, la función fileexists() envía false ya que no lo encuentra. Ya busqué en las carpetas de usuarios pero no se si tienen un nombre en especial la carpeta oculta que mencionas porque en la única carpeta que lo encontré fue en "recientes".


La franja horaria es GMT +2. Ahora son las 10:16:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi