гм в самом простом случае можно заюзать IsBadReadPtr (проверить указатель на валидность) Код (Text): This function verifies that the calling process has read access to the specified range of memory. Security Note This function is unsafe to use when checking your input parameters for correctness or accuracy. For more information about secure coding practices, see Enhancing the Security of a Device. BOOL IsBadReadPtr( const void* lp, UINT ucb ); Parameters lp [in] Pointer to the first byte of the memory block. ucb [in] Specifies the size, in bytes, of the memory block. If this parameter is zero, the return value is zero. Return Values Zero indicates that the calling process has read access to all bytes in the specified memory range. Nonzero indicates that the calling process does not have read access to all bytes in the specified memory range. Странно что указатель не нудевой. Я не сталкивался, но что с длиной? WORD wDataLength; Чему она равна в последней структуре?