修订版 | 6a8f77a632351a53269e3fc43bfba7596fa4e880 (tree) |
---|---|
时间 | 2012-03-13 23:29:42 |
作者 | 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 |