I don't think that this is anything to do with Code Pages - in the strict sense that a code page used to be used to map different characters to the top 128 bytes of an 8 bit character set.
I believe that the Pocket PC, as well as the Compact Framework, uses Unicode characters which makes code pages obsolete. It is probable, though I don't know for sure, that the name in the Registry is held as a UTF-8 string
Alfcen's code assumes that the name is returned as bytes each of which he transforms into a char. This only a valid assumption if the the characters are in the ASCII character set. In Unicode other characters, such as Russian are held as two or more characters - hence the fact that Asc returns numbers larger than 256 for Russian characters. I would try assigning the return of Reg.GetValue to a string if it will do it without erroring.
UTF-8 has variable character lengths which makes programming strings a pain so .NET uses Unicode UTF-16 format strings in which ALL characters are held as 16 bit characters so obtaining sub-strings and indexing into strings works as you expect. .NET Streams often transform from UTF-8 to UTF-16 and vice-versa on input and output. This is why you have the cASCII parameter in the FileOpen statement. It defines that the stream is treated as purely 8 bit characters. Without cASCII the stream is treated as a stream of UTF-8 characters some of which are 8 and some of which are 16 bits. So on output the .NET UTF-16 string is transformed to either ASCII (with potential loss of unsupported characters) or UTF-8 characters and the reverse happens on input. ASCII streams code pages are supported in .NET so that UTF-16 strings can be converted to pure 8bit character strings and back without losing characters. The Bitwise library New2 constructor supports code pages for byte to and from string conversion but I haven't played with it myself.
Sorry if this is a bit long. Wikipedia has a couple of good articles about Unicode and Code Pages.