| Revision | 6a8f77a632351a53269e3fc43bfba7596fa4e880 (tree) |
|---|---|
| Time | 2012-03-13 23:29:42 |
| Author | qwerty2501 <qwerty2501@user...> |
| Commiter | qwerty2501 |
IEクッキーが取れなかった場合の最後の手段を追加
| @@ -1,4 +1,5 @@ | ||
| 1 | 1 | cmd /c git add *.cpp |
| 2 | +cmd /c git add *.c | |
| 2 | 3 | cmd /c git add *. |
| 3 | 4 | cmd /c git add *.h |
| 4 | 5 | cmd /c git add nlite\nlite.rc |
| @@ -12,7 +12,8 @@ | ||
| 12 | 12 | #include <qwerty\qwerty_common.h> |
| 13 | 13 | #include <qwerty\windebuger.h> |
| 14 | 14 | |
| 15 | - | |
| 15 | +static TCHAR ieCookiePath[_MAX_PATH]; //IEのクッキーパス | |
| 16 | +static TCHAR ieCookieSecPath[_MAX_PATH]; //IEセキュリティモードのパス | |
| 16 | 17 | static WCHAR fireFoxCookiePath[_MAX_PATH]; //ファイアフォックスのクッキーのパス |
| 17 | 18 | static sqlite3 *firefoxCookie; //ファイアフォックスのクッキーのDB |
| 18 | 19 | static sqlite3_stmt *firefoxCookieStmt; //ファイアフォックスのクッキー取得用ステートメント |
| @@ -42,6 +43,17 @@ static INLINE VOID cookieStepExec(sqlite3_stmt *stmt,LPWSTR cooki,SIZE_T bufSize | ||
| 42 | 43 | /// |
| 43 | 44 | static BROWSERTYPE getDefaultBrowserType(); |
| 44 | 45 | |
| 46 | + | |
| 47 | +/// | |
| 48 | +///ユーザー個別の規定のブラウザタイプを取得 | |
| 49 | +/// | |
| 50 | +static BROWSERTYPE getDefaultBrowserTypeInvidialUser(); | |
| 51 | + | |
| 52 | +/// | |
| 53 | +///端末全体の規定のブラウザタイプを取得 | |
| 54 | +/// | |
| 55 | +static BROWSERTYPE getDefaultBrowserTypeLocalMachine(); | |
| 56 | + | |
| 45 | 57 | /// |
| 46 | 58 | ///自力で解析す場合の共通処理 |
| 47 | 59 | /// |
| @@ -53,6 +65,15 @@ static INLINE COOKIE_RESULT SelfParseCookie(LPCWSTR cookieFilePath,LPWSTR cookie | ||
| 53 | 65 | static INLINE COOKIE_RESULT GetCookieInternetExplorer(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein,BOOL isIE); |
| 54 | 66 | |
| 55 | 67 | /// |
| 68 | +///インターネットエクスプローラーのクッキーファイルを自力で解析 | |
| 69 | +/// | |
| 70 | +static INLINE COOKIE_RESULT GetCookieInternetExplorerSelfParse(LPCWSTR dir,LPWSTR cookie,SIZE_T bufSize,LPCWSTR key,LPCWSTR domein); | |
| 71 | + | |
| 72 | +/// | |
| 73 | +///自力解析時のコールバック関数 | |
| 74 | +/// | |
| 75 | +static COOKIE_RESULT selfParseIECallBack(LPCSTR targetString,LPCSTR targetEndPointer,LPWSTR cookie,SIZE_T bufSize,LPCWSTR key,LPCWSTR domein); | |
| 76 | +/// | |
| 56 | 77 | ///ファイアフォックスのクッキーを取得 |
| 57 | 78 | /// |
| 58 | 79 | static INLINE COOKIE_RESULT GetCookieFireFox(LPWSTR cookie,SIZE_T bufSize, LPCWSTR key,LPCWSTR domein); |
| @@ -80,6 +101,15 @@ static INLINE COOKIE_RESULT GetCookieSafari(LPCSTR targetString,LPCSTR targetEnd | ||
| 80 | 101 | |
| 81 | 102 | VOID InitializeShareCookie(LPCWSTR appDataPath,LPCWSTR localAppDataPath){ |
| 82 | 103 | |
| 104 | + //IEの設定 | |
| 105 | + | |
| 106 | + //クッキーフォルダ検索 | |
| 107 | + SHGetFolderPathW(0,CSIDL_COOKIES,0,SHGFP_TYPE_CURRENT,ieCookiePath); | |
| 108 | + _tcscat(ieCookiePath,TEXT("\\")); | |
| 109 | + _stprintf(ieCookieSecPath,TEXT("%s%s"),ieCookiePath,TEXT("Low\\")); | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 83 | 113 | //FireFoxの設定 |
| 84 | 114 | { |
| 85 | 115 |
| @@ -422,6 +452,124 @@ end: | ||
| 422 | 452 | return result; |
| 423 | 453 | } |
| 424 | 454 | |
| 455 | +static INLINE COOKIE_RESULT GetCookieInternetExplorerSelfParse(LPCWSTR dir,LPWSTR cookie,SIZE_T bufSize,LPCWSTR key,LPCWSTR domein){ | |
| 456 | + | |
| 457 | + | |
| 458 | + COOKIE_RESULT result = COOKIE_ERR_DETAIL_NOTFOUND; | |
| 459 | + TCHAR seachFormat[_MAX_PATH]; | |
| 460 | + TCHAR cookieFileBuf[_MAX_PATH]; | |
| 461 | + WIN32_FIND_DATA findData; | |
| 462 | + HANDLE hFindFile = NULL; | |
| 463 | + _stprintf(seachFormat,TEXT("%s%s"),dir,TEXT("?*.txt")); | |
| 464 | + | |
| 465 | + hFindFile = FindFirstFile(seachFormat,&findData); | |
| 466 | + | |
| 467 | + do{ | |
| 468 | + if(hFindFile == INVALID_HANDLE_VALUE)goto notfind; | |
| 469 | + | |
| 470 | + if((findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FALSE){ | |
| 471 | + | |
| 472 | + _stprintf(cookieFileBuf,TEXT("%s%s"),dir,findData.cFileName); | |
| 473 | + result = SelfParseCookie(cookieFileBuf,cookie,bufSize,key,domein,selfParseIECallBack); | |
| 474 | + | |
| 475 | + if(result != COOKIE_ERR_DETAIL_NOTFOUND)goto end; | |
| 476 | + | |
| 477 | + } | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + }while(FindNextFile(hFindFile,&findData)); | |
| 482 | + | |
| 483 | +end: | |
| 484 | + | |
| 485 | + FindClose(hFindFile); | |
| 486 | + return result; | |
| 487 | + | |
| 488 | +notfind: | |
| 489 | + result = COOKIE_ERR_DETAIL_NOTFOUND; | |
| 490 | + goto end; | |
| 491 | +} | |
| 492 | + | |
| 493 | +static COOKIE_RESULT selfParseIECallBack(LPCSTR targetString,LPCSTR targetEndPointer,LPWSTR cookie,SIZE_T bufSize,LPCWSTR key,LPCWSTR domein){ | |
| 494 | + | |
| 495 | + COOKIE_RESULT result = COOKIE_ERR_UNKNOWN; | |
| 496 | + | |
| 497 | + CHAR mb_key[_MAX_PATH]; | |
| 498 | + CHAR mb_domein[_MAX_PATH]; | |
| 499 | + CHAR cookie_mbBuff[_MAX_PATH]; | |
| 500 | + DWORD cookieBufSize = 0; | |
| 501 | + LPCSTR keyStartPointer = NULL; | |
| 502 | + LPCSTR cookieStartPointer = NULL; | |
| 503 | + LPCSTR cookieEndPointer = NULL; | |
| 504 | + LPCSTR astorStartPointer = NULL; | |
| 505 | + LPCSTR domeinStartPointer = NULL; | |
| 506 | + | |
| 507 | + if(ARRAY_LENGTH(mb_key) < GetLenToMB(CP_THREAD_ACP,key)){ | |
| 508 | + | |
| 509 | + goto keybuffbigerr; | |
| 510 | + | |
| 511 | + } else if(ARRAY_LENGTH(mb_domein) < GetLenToMB(CP_THREAD_ACP,domein) ){ | |
| 512 | + | |
| 513 | + goto domeinbuffbigerr; | |
| 514 | + | |
| 515 | + } | |
| 516 | + | |
| 517 | + | |
| 518 | + WideToMB(CP_THREAD_ACP,key,mb_key,ARRAY_LENGTH(mb_key)); | |
| 519 | + WideToMB(CP_THREAD_ACP,domein,mb_domein,ARRAY_LENGTH(mb_domein)); | |
| 520 | + | |
| 521 | + keyStartPointer = strstr(targetString,mb_key); | |
| 522 | + | |
| 523 | + if(keyStartPointer == NULL)goto notfound; | |
| 524 | + cookieStartPointer = strstr(keyStartPointer,"\n"); | |
| 525 | + | |
| 526 | + if(cookieStartPointer == NULL)goto notfound; | |
| 527 | + | |
| 528 | + cookieStartPointer++; | |
| 529 | + | |
| 530 | + cookieEndPointer = strstr(cookieStartPointer,"\n"); | |
| 531 | + | |
| 532 | + astorStartPointer = strstr(cookieEndPointer+1,"*"); | |
| 533 | + domeinStartPointer = strstr(cookieEndPointer+1,mb_domein); | |
| 534 | + if(astorStartPointer == NULL || domeinStartPointer == NULL || astorStartPointer <= domeinStartPointer)goto notfound; | |
| 535 | + cookieBufSize = cookieEndPointer - cookieStartPointer; | |
| 536 | + strncpy(cookie_mbBuff,cookieStartPointer,cookieBufSize); | |
| 537 | + cookie_mbBuff[cookieBufSize]='\0'; | |
| 538 | + if(((INT_PTR)bufSize) < GetLenToWide(CP_THREAD_ACP,cookie_mbBuff) + wcslen(key) + 1){ | |
| 539 | + | |
| 540 | + goto cookiebuffbigerr; | |
| 541 | + } | |
| 542 | + wcscpy(cookie,key); | |
| 543 | + cookie += wcslen(cookie); | |
| 544 | + cookie[0] = L'='; | |
| 545 | + cookie++; | |
| 546 | + | |
| 547 | + MBToWide(CP_THREAD_ACP,cookie_mbBuff,cookie,bufSize); | |
| 548 | + result = COOKIE_ERR_OK; | |
| 549 | + | |
| 550 | +end: | |
| 551 | + | |
| 552 | + return result; | |
| 553 | + | |
| 554 | +keybuffbigerr: | |
| 555 | + result =COOKIE_ERR_DETAIL_KEY_TOOBIG; | |
| 556 | + goto end; | |
| 557 | + | |
| 558 | + | |
| 559 | +domeinbuffbigerr: | |
| 560 | + result = COOKIE_ERR_DETAIL_DOMEIN_TOOBIG; | |
| 561 | + goto end; | |
| 562 | + | |
| 563 | + | |
| 564 | +notfound: | |
| 565 | + result = COOKIE_ERR_DETAIL_NOTFOUND; | |
| 566 | + goto end; | |
| 567 | + | |
| 568 | +cookiebuffbigerr: | |
| 569 | + result = COOKIE_ERR_DETAIL_DOMEIN_TOOBIG; | |
| 570 | + goto end; | |
| 571 | +} | |
| 572 | + | |
| 425 | 573 | /// |
| 426 | 574 | ///ファイアフォックスのクッキーを取得 |
| 427 | 575 | /// |
| @@ -957,6 +1105,20 @@ fileopenerr: | ||
| 957 | 1105 | |
| 958 | 1106 | BROWSERTYPE getDefaultBrowserType(){ |
| 959 | 1107 | |
| 1108 | + BROWSERTYPE rslt = getDefaultBrowserTypeInvidialUser(); | |
| 1109 | + | |
| 1110 | + if(rslt == BT_NOSETTING){ | |
| 1111 | + | |
| 1112 | + rslt = getDefaultBrowserTypeLocalMachine(); | |
| 1113 | + } | |
| 1114 | + | |
| 1115 | + return rslt; | |
| 1116 | + | |
| 1117 | +} | |
| 1118 | + | |
| 1119 | + | |
| 1120 | +static BROWSERTYPE getDefaultBrowserTypeInvidialUser(){ | |
| 1121 | + | |
| 960 | 1122 | BROWSERTYPE rslt = BT_NOSETTING; |
| 961 | 1123 | WCHAR browserName[_MAX_PATH]; |
| 962 | 1124 | DWORD cName = sizeof(browserName); |
| @@ -1004,4 +1166,57 @@ BROWSERTYPE getDefaultBrowserType(){ | ||
| 1004 | 1166 | |
| 1005 | 1167 | RegCloseKey(hKey); |
| 1006 | 1168 | return rslt; |
| 1169 | + | |
| 1170 | +} | |
| 1171 | + | |
| 1172 | + | |
| 1173 | +static BROWSERTYPE getDefaultBrowserTypeLocalMachine(){ | |
| 1174 | + | |
| 1175 | + | |
| 1176 | + BROWSERTYPE rslt = BT_NOSETTING; | |
| 1177 | + | |
| 1178 | + | |
| 1179 | + return rslt; | |
| 1180 | + | |
| 1181 | +} | |
| 1182 | + | |
| 1183 | + | |
| 1184 | + | |
| 1185 | + | |
| 1186 | + | |
| 1187 | + | |
| 1188 | + | |
| 1189 | + | |
| 1190 | + | |
| 1191 | + | |
| 1192 | + | |
| 1193 | + | |
| 1194 | + | |
| 1195 | + | |
| 1196 | + | |
| 1197 | + | |
| 1198 | + | |
| 1199 | + | |
| 1200 | + | |
| 1201 | + | |
| 1202 | + | |
| 1203 | + | |
| 1204 | + | |
| 1205 | + | |
| 1206 | + | |
| 1207 | + | |
| 1208 | + | |
| 1209 | +VOID ShareCookieUnitTest(){ | |
| 1210 | + | |
| 1211 | + TCHAR cookieBuf[_MAX_PATH]; | |
| 1212 | + SIZE_T cookieBufSize = ARRAY_LENGTH(cookieBuf); | |
| 1213 | + LPCTSTR key = TEXT("user_session"); | |
| 1214 | + LPCTSTR domein = TEXT("nicovideo.jp"); | |
| 1215 | + check(GetCookieInternetExplorerSelfParse(ieCookiePath,cookieBuf,cookieBufSize,key,domein) == COOKIE_ERR_OK,TEXT("ie通常クッキー取得に失敗しました")); | |
| 1216 | + dumpln(TEXT("ienormal:%s"),cookieBuf); | |
| 1217 | + | |
| 1218 | + check(GetCookieInternetExplorerSelfParse(ieCookieSecPath,cookieBuf,cookieBufSize,key,domein) == COOKIE_ERR_OK,TEXT("ieセキュリティモードクッキー取得に失敗しました")); | |
| 1219 | + dumpln(TEXT("iesec:%s"),cookieBuf); | |
| 1220 | + | |
| 1221 | + return; | |
| 1007 | 1222 | } |
| \ No newline at end of file |