Veo que no miras los atributos, puede que una carpeta esté oculta, y allí no buscará.
Yo uso este código para buscar por el menú Inicio de windows y no falla. Hago 2 búsquedas una para carpetas y otra para los archivos dentro de esa carpeta. El try... except más interior es donde tendrías que añadir el form1.memo.add(...)
Mi parámetro "search" es parte del nombre del archivo, puede ser 'Microsoft' o bien '*Word'.
Código Delphi
[-]
procedure TFrmBuscador.busca(InitialPath, Search: String);
var
t, d: TsearchRec; rest, resd: Integer;
begin
if length(search) < 1 then
exit;
rest := findfirst(InitialPath + '\*.*', faAnyFile, t); while rest = 0 do
begin
if (t.name <> '.') and (t.name <> '..') then
if (t.Attr >= fadirectory) and (t.Attr < faarchive) then
busca(InitialPath + '\' + t.name, Search)
else begin
form1.memo1.Lines.Add( InitialPath+'\'+t.Name);
resd := findfirst(InitialPath + '\' + search + '*.*', faArchive, d);
while resd = 0 do
begin
if (d.Attr <> fadirectory) and (d.name <> '.') and (d.name <> '..') then
begin
try
except end;
end;
resd := sysutils.findnext(d);
end;
sysutils.FindClose(d);
end; rest := sysutils.FindNext(t);
end; sysutils.FindClose(t);
end;
Saludos
PD: Ahora que lo miro bien, estoy duplicando las búsquedas, el restd no se debía de hacer