AOD>sh.pFrom = (LPCSTR)root.GetBuffer();
AOD>В чем может быть причина?
Надо к имени файла прибавить еще '\0'. Из MSDN:
pFrom
Note This string must be double-null terminated.
A pointer to one or more source file names. These names should be fully-qualified paths to prevent unexpected results.
Standard Microsoft MS-DOS wildcard characters, such as "*", are permitted only in the file-name position. Using a wildcard character elsewhere in the string will lead to unpredictable results.
Although this member is declared as a single null-terminated string, it is actually a buffer that can hold multiple null-delimited file names. Each file name is terminated by a single NULL character. The last file name is terminated with a double NULL character ("\0\0") to indicate the end of the buffer.