lstrcpy(p+1, w32fd.cFileName);
lstrcpy(pname+1, w32fd.cFileName);
void WinDirectory::read_directory(){	Entry* first_entry = NULL;	Entry* last = NULL;	Entry* entry;	int level = _level + 1;	LPCTSTR path = (LPCTSTR)_path;	TCHAR buffer[MAX_PATH], *p;	for(p=buffer; *path; )		*p++ = *path++;	lstrcpy(p, TEXT("\\*"));	WIN32_FIND_DATA w32fd;	HANDLE hFind = FindFirstFile(buffer, &w32fd);	if (hFind != INVALID_HANDLE_VALUE) {		do {			lstrcpy(p+1, w32fd.cFileName);			if (w32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)				entry = new WinDirectory(this, buffer);			else				entry = new WinEntry(this);			if (!first_entry)				first_entry = entry;			if (last)				last->_next = entry;			memcpy(&entry->_data, &w32fd, sizeof(WIN32_FIND_DATA));			entry->_down = NULL;			entry->_expanded = false;			entry->_scanned = false;			entry->_level = level;			entry->_bhfi_valid = false;			HANDLE hFile = CreateFile(buffer, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,										0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);			if (hFile != INVALID_HANDLE_VALUE) {				if (GetFileInformationByHandle(hFile, &entry->_bhfi))					entry->_bhfi_valid = true;				if (ScanNTFSStreams(entry, hFile))					entry->_scanned = true;	// There exist named NTFS sub-streams in this file.				CloseHandle(hFile);			}			last = entry;		} while(FindNextFile(hFind, &w32fd));		last->_next = NULL;		FindClose(hFind);	}	_down = first_entry;	_scanned = true;}