BOOL IsValidWideChar(char16 ch) { return (ch < 0xfdd0) || ((ch > 0xfdef) && (ch <= 0xffef)) || ((ch >= 0xfff9) && (ch <= 0xfffd)); } inline BOOL IsHighSurrogateChar(char16 ch) { return InRange( ch, WCH_UTF16_HIGH_FIRST, WCH_UTF16_HIGH_LAST ); } inline BOOL IsLowSurrogateChar(char16 ch) { return InRange( ch, WCH_UTF16_LOW_FIRST, WCH_UTF16_LOW_LAST ); } _At_(ptr, _In_reads_(end - ptr) _Post_satisfies_(ptr >= _Old_(ptr) - 1 && ptr <= end)) inline char16 DecodeTail(char16 c1, LPCUTF8& ptr, LPCUTF8 end, DecodeOptions& options, bool *chunkEndsAtTruncatedSequence) { char16 ch = 0; BYTE c2, c3, c4; switch (EncodedBytes(c1)) { case 1: if (c1 < 0x80) return c1; if ((options & doSecondSurrogatePair) != 0) { // We're in the middle of decoding a surrogate pair from a four-byte utf8 sequence. // The high word has already been returned, but without advancing ptr, which was on byte 1. // ptr was then advanced externally when reading c1, which is byte 1, so ptr is now on byte 2.
#ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, CdConvertBigToLittleEndian) #pragma alloc_text(PAGE, CdConvertNameToCdName) #pragma alloc_text(PAGE, CdDissectName) #pragma alloc_text(PAGE, CdGenerate8dot3Name) #pragma alloc_text(PAGE, CdFullCompareNames) #pragma alloc_text(PAGE, CdIsLegalName) #pragma alloc_text(PAGE, CdIs8dot3Name) #pragma alloc_text(PAGE, CdIsNameInExpression) #pragma alloc_text(PAGE, CdShortNameDirentOffset) #pragma alloc_text(PAGE, CdUpcaseName) #endif _Post_satisfies_(_Old_(CdName->FileName.Length) >= CdName->FileName.Length + CdName->VersionString.Length) VOID CdConvertNameToCdName ( _In_ PIRP_CONTEXT IrpContext, _Inout_ PCD_NAME CdName ) /*++ Routine Description: This routine is called to convert a string of bytes into a CdName. The full name is already in the CdName structure in the FileName field. We split this into the filename and version strings.