광고 수익은 기아대책 서울본부에 기부합니다.

2012.04.23 16:27 윈도우/참고

윈도우즈 오류 검사

 

출처 : http://pleasebetrue.tistory.com/4

posted by Town One townone

댓글을 달아 주세요

2012.04.05 16:43 윈도우/참고
http://www.fiddler2.com/fiddler2/version.asp
posted by Town One townone

댓글을 달아 주세요

2012.04.04 11:00 윈도우/참고

위와 같은 메시지가 발생되는 에러 일경우는 Dll 에서 할당한 메모리를 메인에서 해제 하려 할때 발생합니다. 이해는 할 수 없지만... 아마도 쓰레드에서 할당하는 메모리 포인터가 다른 구조로 관리되는 듯

아래와 같은 경우 인데요

CStringArray 를 DLL 에 전달하면 아이템을 Add 해주는 함수를 호출시 CStringArray 를 메인에서 RemoveAll 함수 호출로 해제 하려할때 위와 같은 에러 메시지가 발생 하였습니다.

해결 방법 : DLL 에 해제 하는 함수를 만들어 해제할때 사용 함.

아래 참고 블로그에서 환경 설정을 맞춰 주면 해결되었다고 하는데 저의 경우에는 해결 안되더군요.

참고 : http://saintrv.egloos.com/1560122

* 에러의 원인은 서로 다른 버젼의 dll 로 인해 힙영역 메모리가 다르게 할당되어서 입니다.

dll 에서도 같은 버젼으 dll 을 쓰도록 manifest 를 걸어 주도록 한다.

posted by Town One townone

댓글을 달아 주세요

2012.03.14 09:46 윈도우/참고
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"

// WMDM includes
#include "mswmdm_i.c"
#include "mswmdm.h"
#include "sac.h"
#include "scclient.h"

void OutputNibble(BYTE b)
{
	char ch = (b < 10) ? b += 48 : b+= 55;
	printf("%c", ch);
}

void OutputByte(BYTE b) 
{
	BYTE nb = b;
	nb = nb>>4;
	OutputNibble(nb);
	nb = b;
	nb = nb & 0x0F;
	OutputNibble(nb);
}

int main(int argc, char* argv[])
{
	HRESULT hr;
	IComponentAuthenticate* pICompAuth;
	CSecureChannelClient *m_pSacClient = new CSecureChannelClient;
	IWMDeviceManager3* m_pIdvMgr = NULL;

	//these are generic keys
	BYTE abPVK[] = {0x00};
	BYTE abCert[] = {0x00};

	printf("MTP Serial Numbers\n");
	printf("==================\n");

	CoInitialize(NULL);

	// get an authentication interface
	hr = CoCreateInstance(CLSID_MediaDevMgr, NULL, CLSCTX_ALL ,IID_IComponentAuthenticate, (void **)&pICompAuth);
	if SUCCEEDED(hr)
	{
		// create a secure channel client certificate
		hr = m_pSacClient->SetCertificate(SAC_CERT_V1, (BYTE*) abCert, sizeof(abCert), (BYTE*) abPVK, sizeof(abPVK));
		if SUCCEEDED(hr)
		{
			// bind the authentication interface to the secure channel client
			m_pSacClient->SetInterface(pICompAuth);

			// trigger communication
			hr = m_pSacClient->Authenticate(SAC_PROTOCOL_V1);                    
			if SUCCEEDED(hr)
			{
				// get main interface to media device manager
				hr = pICompAuth->QueryInterface(IID_IWMDeviceManager2, (void**)&m_pIdvMgr);
				if SUCCEEDED(hr)
				{
					// we now have a media device manager interface...

					// enumerate devices...
					IWMDMEnumDevice *pIEnumDev;
					wchar_t pwsString[256];
					char ch[256];
					hr = m_pIdvMgr->EnumDevices2(&pIEnumDev);
					if SUCCEEDED(hr) {
						hr = pIEnumDev->Reset(); // Next will now return the first device
						if SUCCEEDED(hr) {
							printf("");
							IWMDMDevice3* pIDevice;
							unsigned long ulNumFetched;
							size_t ret;
							hr = pIEnumDev->Next(1, (IWMDMDevice **)&pIDevice, &ulNumFetched);
							while (SUCCEEDED(hr) && (hr != S_FALSE)) {
								// output device name
								hr = pIDevice->GetName(pwsString, 256);
								if SUCCEEDED(hr) {
									wcstombs_s(&ret, ch, 256, pwsString,_TRUNCATE);
									printf("Found device %s\n", ch);
								}

								// get serial number (if available)
								WMDMID serialNumber;
								BYTE mac[WMDM_MAC_LENGTH];
								hr = pIDevice->GetSerialNumber(&serialNumber, mac);
								if SUCCEEDED(hr) {
									printf("Serial Number : 0x");
									for (UINT i = 0; i < serialNumber.SerialNumberLength; i++) {
										OutputByte(serialNumber.pID[i]);
									}
									printf(" (%d bytes)\n", serialNumber.SerialNumberLength);
								} else {
									switch (hr) {
										case E_INVALIDARG:
											printf("GetSerialNumber failed -- invalid argument.\n");
											break;
										case WMDM_E_NOTSUPPORTED:
											printf("GetSerialNumber failed -- this device doesn't support unique serial numbers.\n");
											break;
										case E_FAIL:
											printf("GetSerialNumber failed -- unspecified error.\n");
											break;
									}
								}

								// move to next device
								hr = pIEnumDev->Next(1, (IWMDMDevice **)&pIDevice, &ulNumFetched);
							}
							pIEnumDev->Release();
						}
						m_pIdvMgr->Release();
					}
					pICompAuth->Release();
				}
			}
		}
	}

	char c = _getch();

	CoUninitialize();

	return 0;
}

출처 : http://opensource.creative.com/mtp_serial_code.txt
posted by Town One townone

댓글을 달아 주세요

2012.03.13 14:57 윈도우/참고


MTP 디바이스가 연결 되면
mswmdm.h 에 정의된 구조체에서 상속 받아

// mswmdm.h 에 정의된 IWMDMNotification 구조체
    IWMDMNotification : public IUnknown
    {
    public:
        virtual HRESULT STDMETHODCALLTYPE WMDMMessage(
            /* [in] */ DWORD dwMessageType,
            /* [string][in] */ __RPC__in LPCWSTR pwszCanonicalName) = 0;
       
    };

// 메시지 핸들러 - 상속 받은 클래스의 오버라이드한 함수.
 HRESULT STDMETHODCALLTYPE WMDMMessage(DWORD  dwMessageType, LPCWSTR  pwszCanonicalName);

HRESULT CIWMDMNotification::WMDMMessage(DWORD  dwMessageType, LPCWSTR  pwszCanonicalName)
{
 switch(dwMessageType)
 {
 case WMDM_MSG_DEVICE_ARRIVAL:
  break;
 case WMDM_MSG_DEVICE_REMOVAL:
  break;
 case WMDM_MSG_MEDIA_ARRIVAL:
  break;
 case WMDM_MSG_MEDIA_REMOVAL:
  break;
 default:
  // TODO: Display a message indicating that an unidentified message has been received.
  break;
 }
 return S_OK; // Return value is ignored, and not returned to the application.
};

에서 구현 가능 하다.

참고
IWMDMNotification::WMDMMessage : http://msdn.microsoft.com/en-us/library/bb231849(v=vs.85).aspx
IWMDMNotification Interface : http://msdn.microsoft.com/en-us/library/bb231848(v=vs.85).aspx
IWMDeviceManager2::GetDeviceFromCanonicalName method  : http://msdn.microsoft.com/en-us/library/windows/desktop/ff801389(v=vs.85).aspx

posted by Town One townone

댓글을 달아 주세요

2012.03.09 12:19 윈도우/참고

An instance of the IWMDMStorage interface provides methods to examine and explore a storage (a generic name for a data or collection object, such as a file, folder, or playlist) on a device. Note that storages cannot be used to refer to objects on the computer, only on the device. IWMDMStorage can contain nested objects, and can represent the root object (the entire storage medium) or any child object, such as a folder or file, on that medium. The IWMDMStorage2 interface extends this interface by making it possible to get a storage pointer from a storage name and to get and set extended attributes. IWMDMStorage3 extends this interface by supporting metadata.

To obtain a root storage object which can be queried for all other objects on a device, you must call IWMDMDevice::EnumStorage, as described in Exploring a Device.

In addition to the methods inherited from IUnknown, the IWMDMStorage interface exposes the following methods.

Method Description
EnumStorage Retrieves an IWMDMEnumStorage interface to enumerate the immediate child storages of the current storage.
GetAttributes Retrieves the attributes of the storage.
GetDate Retrieves the date on which the storage was most recently modified.
GetName Retrieves the display name of the storage.
GetRights Retrieves the rights information for a licensed storage.
GetSize Retrieves the size of the storage, in bytes.
GetStorageGlobals Retrieves the IWMDMStorageGlobals interface to provide access to global information about a storage medium.
SendOpaqueCommand Sends a command to the storage through Windows Media Device Manager.
SetAttributes Sets the attributes of the storage.

출처 : http://msdn.microsoft.com/en-us/library/bb231928(v=vs.85).aspx

posted by Town One townone

댓글을 달아 주세요

2012.02.27 10:41 윈도우/참고

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoDriveTypeAutoRun"=dword:000000ff
posted by Town One townone

댓글을 달아 주세요

2012.02.23 11:26 윈도우/참고

콜백 함수에 대한 에러이다.
함수 선언을 static 함수로 만들던지 전역 함수로 만들어 오류를 해결한다.
posted by Town One townone

댓글을 달아 주세요

2012.02.15 15:15 윈도우/참고

다이얼로그 기반에서 OnChar 이벤트가 오지 않는다.
해당 이벤트를 받을 수 있게 하려면 App 에서 PreTranslateMessage 메시지 핸들러를 추가하고 MainWnd 에 메시지를 전달 해줘야 한다.

BOOL CTestCSKeyApp::PreTranslateMessage(MSG* pMsg)
{
 // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.

 if (pMsg->message == WM_CHAR)
 {
  this->m_pMainWnd->SendMessage(WM_CHAR, pMsg->wParam, pMsg->lParam);
  return TRUE;
 }

 return CWinAppEx::PreTranslateMessage(pMsg);
}

위 코드 처럼 return TRUE; 를 해줘 중복 전달 되지 않도록 한다.

posted by Town One townone

댓글을 달아 주세요