I've found an issue with file name and contains Cyrillic characters (probably same issue is true for other non-Latin encoding but I didn't check).
I have small VMWare image with 2 directories: one named in English and one in Russian (specifically crafted test image). VMWare image file is perfectly valid. Russian directory name is also valid. Image can be opened successfully in VMWare Player and
When I try to open this image and get all directories library throws exception that '?' is not a valid character for file name. I've found that source of the problem is FatUtilities.NormalizeFileName function. In particular it's first line :
string roundTripped = Encoding.Default.GetString(Encoding.Default.GetBytes(name));
Variable 'name' here is a result of BytesToString function and call to Encoding.Default.GetBytes(name) transform all Cyrillic characters to '?' symbols. Subsequent check for invalid characters in file name yields an exception mentioned above.
Exception can be resolved with replacing GetBytes/GetString pair with StringToBytes/GetString/GetBytes/BytesToString but I'm nor sure is this is valid solution. This change removes exception and image can be opened but directory name returned from
this FS entry still in form on BytesToString result and it is a bit unclear how to use this value in application.