﻿# V544\. It is suspicious that the value 'X' of HRESULT type is compared with 'Y'\.

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 V544 warning is generated if the analyzer detects an attempt to compare a variable of the HRESULT type to \-1, true or false\. Consider this sample:

```cpp
HRESULT hr;
...
if (hr == -1)
{
}
```

Comparison of the variable to "\-1" is incorrect\. Error codes may differ\. For instance, these may be 0x80000002L \(Ran out of memory\), 0x80004005L \(unspecified failure\), 0x80070005L \(General access denied error\) and so on\. To check the HRESULT \-value in this case, we must use the FAILED macro defined in "WinError\.h"\. This is the correct code:

```cpp
if (FAILED(hr))
{
}
```

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)\.