ID2D1HwndRenderTargetとID2D1DeviceContext比較してみました。
以下はID2D1DeviceContextを使用した例です。
USE_DEVICECONTEXTをコメントにするとID2D1HwndRenderTargetになります。



#include "stdafx.h"
#include "Win32Project.h"
#define MAX_LOADSTRING 100

HINSTANCE hInst; // 現在のインターフェイス
TCHAR szTitle[MAX_LOADSTRING]; // タイトル バーのテキスト
TCHAR szWindowClass[MAX_LOADSTRING]; // メイン ウィンドウ クラス名

ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

CoInitialize(0);

// TODO: ここにコードを挿入してください。
MSG msg;
HACCEL hAccelTable;

LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_WIN32PROJECT6, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);

if (!InitInstance (hInstance, nCmdShow))
return FALSE;

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT6));

while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}

ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT6));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_WIN32PROJECT6);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

return RegisterClassEx(&wcex);
}

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance;
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)
return FALSE;

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}


#include
#include
#include


#pragma comment(lib,"d2d1.lib")
#pragma comment(lib,"d3d11.lib")


using namespace D2D1;
CComPtr d2d1Factory;
CComPtr d2D1RenderTarget;
CComPtr dXGISwapChain1;

void CreateHwndRenderTarget( HWND hWnd, ID2D1Factory* d2d1Factory, ID2D1RenderTarget** ptarget );
void CreateDeviceContextRenderTarget( HWND hWnd,ID2D1Factory1* d2d1Factory, ID2D1RenderTarget** ptarget, IDXGISwapChain1** pdxgiSwapChain );


#define USE_DEVICECONTEXT // 切り替え

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;

switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 選択されたメニューの解析:
switch (wmId)
{
case IDM_ABOUT:
//DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);

d2D1RenderTarget->BeginDraw();
{
D2D1_MATRIX_3X2_F mat = Matrix3x2F::Identity();
d2D1RenderTarget->SetTransform(mat);
d2D1RenderTarget->Clear(ColorF(ColorF::White));

D2D1_RECT_F rc;
rc.left=10;
rc.top=10;
rc.right=100;
rc.bottom=100;

CComPtr br;
auto hr = d2D1RenderTarget->CreateSolidColorBrush( ColorF(ColorF::Red), &br );

d2D1RenderTarget->FillRectangle( rc, br );// 赤い四角
}

auto hr =d2D1RenderTarget->EndDraw();
if ( hr != S_OK )
{
// ERROR
}

EndPaint(hWnd, &ps);

#ifdef USE_DEVICECONTEXT
dXGISwapChain1->Present(1, 0);
#endif
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;

case WM_ERASEBKGND:
return 1;
break;
case WM_CREATE:
{
D2D1_FACTORY_OPTIONS options;
options.debugLevel = D2D1_DEBUG_LEVEL_NONE;

D2D1CreateFactory( D2D1_FACTORY_TYPE_SINGLE_THREADED,__uuidof(ID2D1Factory1),&options,(void**)&d2d1Factory );

#ifndef USE_DEVICECONTEXT
CreateHwndRenderTarget( hWnd, d2d1Factory,&d2D1RenderTarget );
#endif
}
break;
case WM_SIZE:
{
#ifdef USE_DEVICECONTEXT
d2D1RenderTarget.Release();
dXGISwapChain1.Release();

CreateDeviceContextRenderTarget( hWnd, d2d1Factory, &d2D1RenderTarget, &dXGISwapChain1 );
#else
CComPtr d2d1HwndRenderTagrget;
d2D1RenderTarget.p->QueryInterface( IID_ID2D1HwndRenderTarget, (void**)&d2d1HwndRenderTagrget);
d2d1HwndRenderTagrget->Resize( D2D1::SizeU( LOWORD(lParam), HIWORD(lParam) ));
#endif
}
break;

default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

inline void ThrowIfFailed( HRESULT hr, LPCWSTR msg, UINT line, LPCSTR fnm )
{
if (FAILED(hr))
{
// Do something.
//General access denied error 0x80070005
}
}
#define THROWIFFAILED(hr,msg) ThrowIfFailed(hr,msg, __LINE__, __FILE__)

static void CreateHwndRenderTarget( HWND hWnd, ID2D1Factory* d2d1Factory, ID2D1RenderTarget** ptarget )
{
CComPtr d2d1HwndRenderTagrget;

THROWIFFAILED(d2d1Factory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(), D2D1::HwndRenderTargetProperties(hWnd, D2D1::SizeU(1, 1), D2D1_PRESENT_OPTIONS_NONE), &d2d1HwndRenderTagrget), L"D2DContext::CreateHwndRenderTarget");

d2d1HwndRenderTagrget->QueryInterface( IID_ID2D1RenderTarget, (void**)ptarget );
}

static void CreateDeviceContextRenderTarget( HWND hWnd,ID2D1Factory1* d2d1Factory, ID2D1RenderTarget** ptarget, IDXGISwapChain1** pdxgiSwapChain )
{
RECT rc;
GetClientRect(hWnd, &rc);

// UINT width = ::GetSystemMetrics( SM_CXFULLSCREEN );
// UINT height = ::GetSystemMetrics( SM_CYFULLSCREEN );

UINT width = rc.right;
UINT height = rc.bottom;

CComPtr d2d1DeviceContext;
CComPtr dxgiSwapChain1;
//CComPtr d2d1Factory;

CComPtr d2d1Device;
CComPtr d2d1Bitmap;

CComPtr d3d11DeviceContext;
CComPtr d3d11Device;
CComPtr dxgiSurface;
CComPtr dxgiAdapter;
CComPtr dxgiFactory;
CComPtr dxgiDevice;

UINT flags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;

UINT creationFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;

D3D_FEATURE_LEVEL returnedFeatureLevel;

D3D_FEATURE_LEVEL featureLevels[] =
{
D3D_FEATURE_LEVEL_11_1,
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0,
D3D_FEATURE_LEVEL_9_3,
D3D_FEATURE_LEVEL_9_2,
D3D_FEATURE_LEVEL_9_1
};


THROWIFFAILED( D3D11CreateDevice(nullptr, D3D_DRIVER_TYPE_HARDWARE, 0, creationFlags, featureLevels, ARRAYSIZE(featureLevels), D3D11_SDK_VERSION,
&d3d11Device, &returnedFeatureLevel, &d3d11DeviceContext),L"CreateDeviceContextRenderTarget");


THROWIFFAILED(d3d11Device->QueryInterface(&dxgiDevice),L"CreateDeviceContextRenderTarget");
THROWIFFAILED(d2d1Factory->CreateDevice(dxgiDevice.p, &d2d1Device),L"CreateDeviceContextRenderTarget");
THROWIFFAILED(d2d1Device->CreateDeviceContext(D2D1_DEVICE_CONTEXT_OPTIONS_NONE, &d2d1DeviceContext),L"CreateDeviceContextRenderTarget");
THROWIFFAILED(dxgiDevice->GetAdapter(&dxgiAdapter),L"CreateDeviceContextRenderTarget");
THROWIFFAILED(dxgiAdapter->GetParent(IID_PPV_ARGS(&dxgiFactory)),L"CreateDeviceContextRenderTarget");

DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {0};
swapChainDesc.Width = width;
swapChainDesc.Height = height;
swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
swapChainDesc.Stereo = false;
swapChainDesc.SampleDesc.Count = 1;
swapChainDesc.SampleDesc.Quality = 0;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.BufferCount = 2;
swapChainDesc.Scaling = DXGI_SCALING_NONE;
swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
swapChainDesc.Flags = 0;

THROWIFFAILED(dxgiFactory->CreateSwapChainForHwnd(d3d11Device,
hWnd,
&swapChainDesc,
nullptr,
nullptr,
&dxgiSwapChain1),L"!!CreateSwapChainForHwnd"); // よくここでエラーになる
_ASSERT( dxgiSwapChain1 );

THROWIFFAILED(dxgiDevice->SetMaximumFrameLatency(1),L"CreateDeviceContextRenderTarget");
THROWIFFAILED(dxgiSwapChain1->GetBuffer(0, IID_PPV_ARGS(&dxgiSurface)),L"CreateDeviceContextRenderTarget");

auto bmp_property = D2D1::BitmapProperties1(D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW, D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_IGNORE));
THROWIFFAILED(d2d1DeviceContext->CreateBitmapFromDxgiSurface(dxgiSurface.p, &bmp_property, &d2d1Bitmap),L"CreateDeviceContextRenderTarget");
d2d1DeviceContext->SetTarget(d2d1Bitmap.p);

auto sz = d2d1Bitmap->GetSize();

_ASSERT( sz.width == width );
_ASSERT( sz.height == height );
//////////////////////////////////////////////////////////////////////////////////////////////

d2d1DeviceContext->QueryInterface( IID_ID2D1RenderTarget, (void**)ptarget );

*pdxgiSwapChain = dxgiSwapChain1.p;
(*pdxgiSwapChain)->AddRef();
}

ID2D1DeviceContextではWM_SIZEでのDestroy->Createさせてますが画面フルサイズでbmpを作成すれば不要になます。
なお、RenderTargetをDestroy->Createするとこれを引数で作成したオブジェクト(Brushなど)はすべて使えなくなります。
ID2D1DeviceContextはDirect3Dと絡むため頻繁にアップデートされるドライバーのバグにはまるような気がします。