﻿# V543\. It is suspicious that value 'X' is assigned to the variable 'Y' of HRESULT type\.

The analyzer detected a potential error related to handling a variable of the HRESULT type\.

HRESULT is a 32\-bit value divided into three different fields: severity code, device code and error code\. Such special constants as S\_OK, E\_FAIL, E\_ABORT, etc\. serve to handle HRESULT\-values while the SUCCEEDED and FAILED macros are used to check HRESULT\-values\.

The V543 warning is generated if the analyzer detects an attempt to write value \-1, true or false into a variable of the HRESULT type\. Consider this sample:

```cpp
HRESULT h;
...
if (bExceptionCatched)
{
  ShowPluginErrorMessage(pi, errorText);
  h = -1;
}
```

Writing of value "\-1" is incorrect\. If you want to report about some unspecified error, you should use value 0x80004005L \(Unspecified failure\)\. This constant and the like are described in "WinError\.h"\. This is the correct code:

```cpp
if (bExceptionCatched)
{
  ShowPluginErrorMessage(pi, errorText);
  h = E_FAIL;
}
```

References:

1. MSDN\. [Common HRESULT Values](https://docs.microsoft.com/en-us/windows/win32/seccrypto/common-hresult-values)\. 
1. Wikipedia\. [HRESULT](https://en.wikipedia.org/wiki/HRESULT)\.