青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

C++ Coder

HCP高性能計(jì)算架構(gòu),實(shí)現(xiàn),編譯器指令優(yōu)化,算法優(yōu)化, LLVM CLANG OpenCL CUDA OpenACC C++AMP OpenMP MPI

C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
  98 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks
http://www.cnblogs.com/bluesky_blog/archive/2009/04/29.html
管理用戶權(quán)限可以實(shí)現(xiàn)以編程方式使用下列步驟:
  1. 打開與 LsaOpenPolicy() 的目標(biāo)計(jì)算機(jī)上的策略。 要授予的權(quán)限,打開 POLICY_CREATE_ACCOUNT 和 POLICY_LOOKUP_NAMES 訪問策略。 若要吊銷權(quán)限,打開 POLICY_LOOKUP_NAMES 訪問策略。
  2. 獲取一個(gè) SID (安全標(biāo)識(shí)符),表示用戶 / 組感興趣。 LookupAccountName() 和 LsaLookupNames() API 可以從一個(gè)帳戶名獲取 SID。
  3. 調(diào)用 LsaAddAccountRights() 向由提供的 SID 的用戶授予特權(quán)。
  4. 調(diào)用 LsaRemoveAccountRights() 撤消由提供的 SID 的用戶權(quán)限。
  5. 關(guān)閉該策略與 LsaClose()。
要成功授予和吊銷權(quán)限,調(diào)用方需要是目標(biāo)系統(tǒng)上的管理員。

LSA API LsaEnumerateAccountRights() 可確定已授予的權(quán)限的帳戶。

LSA API LsaEnumerateAccountsWithUserRight() 可確定哪些帳戶已被授予指定的權(quán)限。

MSTOOLS\SECURITY 目錄中 Windows 32 SDK 中提供的這些 LSA API 的文檔和頭文件。

在 Win32 SDK 的最新版本中, 郵件頭顯示在 mstools\samples\win32\winnt\security\include 目錄中且文檔處于正在 \security\lsasamp\lsaapi.hlp。

注意: 這些 LSA API 是當(dāng)前實(shí)現(xiàn)以 Unicode 格式僅。

本示例將授予特權(quán) SeServiceLogonRight 為 argv [1] 上指定的帳戶。

此示例是依賴于這些導(dǎo)入庫(kù)
advapi32.lib (對(duì)于 LsaXxx)
user32.lib (對(duì)于 wsprintf)
本示例將工作正確編譯 ANSI 或 Unicode。

示例代碼

  1/*++
  2You can use domain\account as argv[1]. For instance, mydomain\scott will
  3grant the privilege to the mydomain domain account scott.
  4The optional target machine is specified as argv[2], otherwise, the
  5account database is updated on the local machine.
  6The LSA APIs used by this sample are Unicode only.
  7Use LsaRemoveAccountRights() to remove account rights.
  8Scott Field (sfield)    12-Jul-95
  9--*/

 10#ifndef UNICODE
 11#define UNICODE
 12#endif // UNICODE
 13#include <windows.h>
 14#include <stdio.h>
 15#include "ntsecapi.h"
 16NTSTATUS
 17OpenPolicy(
 18LPWSTR ServerName,          // machine to open policy on (Unicode)
 19DWORD DesiredAccess,        // desired access to policy
 20PLSA_HANDLE PolicyHandle    // resultant policy handle
 21);
 22BOOL
 23GetAccountSid(
 24LPTSTR SystemName,          // where to lookup account
 25LPTSTR AccountName,         // account of interest
 26PSID *Sid                   // resultant buffer containing SID
 27);
 28NTSTATUS
 29SetPrivilegeOnAccount(
 30LSA_HANDLE PolicyHandle,    // open policy handle
 31PSID AccountSid,            // SID to grant privilege to
 32LPWSTR PrivilegeName,       // privilege to grant (Unicode)
 33BOOL bEnable                // enable or disable
 34);
 35void
 36InitLsaString(
 37PLSA_UNICODE_STRING LsaString, // destination
 38LPWSTR String                  // source (Unicode)
 39);
 40void
 41DisplayNtStatus(
 42LPSTR szAPI,                // pointer to function name (ANSI)
 43NTSTATUS Status             // NTSTATUS error value
 44);
 45void
 46DisplayWinError(
 47LPSTR szAPI,                // pointer to function name (ANSI)
 48DWORD WinError              // DWORD WinError
 49);
 50#define RTN_OK 0
 51#define RTN_USAGE 1
 52#define RTN_ERROR 13
 53//
 54// If you have the ddk, include ntstatus.h.
 55//
 56#ifndef STATUS_SUCCESS
 57#define STATUS_SUCCESS  ((NTSTATUS)0x00000000L)
 58#endif
 59int _cdecl
 60main(int argc, char *argv[])
 61{
 62LSA_HANDLE PolicyHandle;
 63WCHAR wComputerName[256]=L"";   // static machine name buffer
 64TCHAR AccountName[256];         // static account name buffer
 65PSID pSid;
 66NTSTATUS Status;
 67int iRetVal=RTN_ERROR;          // assume error from main
 68if(argc == 1)
 69{
 70fprintf(stderr,"Usage: %s <Account> [TargetMachine]\n",
 71argv[0]);
 72return RTN_USAGE;
 73}

 74//
 75// Pick up account name on argv[1].
 76// Assumes source is ANSI. Resultant string is ANSI or Unicode
 77//
 78wsprintf(AccountName, TEXT("%hS"), argv[1]);
 79//
 80// Pick up machine name on argv[2], if appropriate
 81// assumes source is ANSI. Resultant string is Unicode.
 82//
 83if(argc == 3) wsprintfW(wComputerName, L"%hS", argv[2]);
 84//
 85// Open the policy on the target machine.
 86//
 87if((Status=OpenPolicy(
 88wComputerName,      // target machine
 89POLICY_CREATE_ACCOUNT | POLICY_LOOKUP_NAMES,
 90&PolicyHandle       // resultant policy handle
 91)) != STATUS_SUCCESS) {
 92DisplayNtStatus("OpenPolicy", Status);
 93return RTN_ERROR;
 94}

 95//
 96// Obtain the SID of the user/group.
 97// Note that we could target a specific machine, but we don't.
 98// Specifying NULL for target machine searches for the SID in the
 99// following order: well-known, Built-in and local, primary domain,
100// trusted domains.
101//
102if(GetAccountSid(
103NULL,       // default lookup logic
104AccountName,// account to obtain SID
105&pSid       // buffer to allocate to contain resultant SID
106)) {
107//
108// We only grant the privilege if we succeeded in obtaining the
109// SID. We can actually add SIDs which cannot be looked up, but
110// looking up the SID is a good sanity check which is suitable for
111// most cases.
112//
113// Grant the SeServiceLogonRight to users represented by pSid.
114//
115if((Status=SetPrivilegeOnAccount(
116PolicyHandle,           // policy handle
117pSid,                   // SID to grant privilege
118L"SeServiceLogonRight"// Unicode privilege
119TRUE                    // enable the privilege
120)) == STATUS_SUCCESS)
121iRetVal=RTN_OK;
122else
123DisplayNtStatus("AddUserRightToAccount", Status);
124}

125else {
126//
127// Error obtaining SID.
128//
129DisplayWinError("GetAccountSid", GetLastError());
130}

131//
132// Close the policy handle.
133//
134LsaClose(PolicyHandle);
135//
136// Free memory allocated for SID.
137//
138if(pSid != NULL) HeapFree(GetProcessHeap(), 0, pSid);
139return iRetVal;
140}

141void
142InitLsaString(
143PLSA_UNICODE_STRING LsaString,
144LPWSTR String
145)
146{
147DWORD StringLength;
148if (String == NULL) {
149LsaString->Buffer = NULL;
150LsaString->Length = 0;
151LsaString->MaximumLength = 0;
152return;
153}

154StringLength = wcslen(String);
155LsaString->Buffer = String;
156LsaString->Length = (USHORT) StringLength * sizeof(WCHAR);
157LsaString->MaximumLength=(USHORT)(StringLength+1* sizeof(WCHAR);
158}

159NTSTATUS
160OpenPolicy(
161LPWSTR ServerName,
162DWORD DesiredAccess,
163PLSA_HANDLE PolicyHandle
164)
165{
166LSA_OBJECT_ATTRIBUTES ObjectAttributes;
167LSA_UNICODE_STRING ServerString;
168PLSA_UNICODE_STRING Server = NULL;
169//
170// Always initialize the object attributes to all zeroes.
171//
172ZeroMemory(&ObjectAttributes, sizeof(ObjectAttributes));
173if (ServerName != NULL) {
174//
175// Make a LSA_UNICODE_STRING out of the LPWSTR passed in
176//
177InitLsaString(&ServerString, ServerName);
178Server = &ServerString;
179}

180//
181// Attempt to open the policy.
182//
183return LsaOpenPolicy(
184Server,
185&ObjectAttributes,
186DesiredAccess,
187PolicyHandle
188);
189}

190/*++
191This function attempts to obtain a SID representing the supplied
192account on the supplied system.
193If the function succeeds, the return value is TRUE. A buffer is
194allocated which contains the SID representing the supplied account.
195This buffer should be freed when it is no longer needed by calling
196HeapFree(GetProcessHeap(), 0, buffer)
197If the function fails, the return value is FALSE. Call GetLastError()
198to obtain extended error information.
199Scott Field (sfield)    12-Jul-95
200--*/

201BOOL
202GetAccountSid(
203LPTSTR SystemName,
204LPTSTR AccountName,
205PSID *Sid
206)
207{
208LPTSTR ReferencedDomain=NULL;
209DWORD cbSid=128;    // initial allocation attempt
210DWORD cchReferencedDomain=16// initial allocation size
211SID_NAME_USE peUse;
212BOOL bSuccess=FALSE; // assume this function will fail
213__try {
214//
215// initial memory allocations
216//
217if((*Sid=HeapAlloc(
218GetProcessHeap(),
2190,
220cbSid
221)) == NULL) __leave;
222if((ReferencedDomain=(LPTSTR)HeapAlloc(
223GetProcessHeap(),
2240,
225cchReferencedDomain * sizeof(TCHAR)
226)) == NULL) __leave;
227//
228// Obtain the SID of the specified account on the specified system.
229//
230while(!LookupAccountName(
231SystemName,         // machine to lookup account on
232AccountName,        // account to lookup
233*Sid,               // SID of interest
234&cbSid,             // size of SID
235ReferencedDomain,   // domain account was found on
236&cchReferencedDomain,
237&peUse
238)) {
239if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
240//
241// reallocate memory
242//
243if((*Sid=HeapReAlloc(
244GetProcessHeap(),
2450,
246*Sid,
247cbSid
248)) == NULL) __leave;
249if((ReferencedDomain=(LPTSTR)HeapReAlloc(
250GetProcessHeap(),
2510,
252ReferencedDomain,
253cchReferencedDomain * sizeof(TCHAR)
254)) == NULL) __leave;
255}

256else __leave;
257}

258//
259// Indicate success.
260//
261bSuccess=TRUE;
262}
 // finally
263__finally {
264//
265// Cleanup and indicate failure, if appropriate.
266//
267HeapFree(GetProcessHeap(), 0, ReferencedDomain);
268if(!bSuccess) {
269if(*Sid != NULL) {
270HeapFree(GetProcessHeap(), 0*Sid);
271*Sid = NULL;
272}

273}

274}
 // finally
275return bSuccess;
276}

277NTSTATUS
278SetPrivilegeOnAccount(
279LSA_HANDLE PolicyHandle,    // open policy handle
280PSID AccountSid,            // SID to grant privilege to
281LPWSTR PrivilegeName,       // privilege to grant (Unicode)
282BOOL bEnable                // enable or disable
283)
284{
285LSA_UNICODE_STRING PrivilegeString;
286//
287// Create a LSA_UNICODE_STRING for the privilege name.
288//
289InitLsaString(&PrivilegeString, PrivilegeName);
290//
291// grant or revoke the privilege, accordingly
292//
293if(bEnable) {
294return LsaAddAccountRights(
295PolicyHandle,       // open policy handle
296AccountSid,         // target SID
297&PrivilegeString,   // privileges
2981                   // privilege count
299);
300}

301else {
302return LsaRemoveAccountRights(
303PolicyHandle,       // open policy handle
304AccountSid,         // target SID
305FALSE,              // do not disable all rights
306&PrivilegeString,   // privileges
3071                   // privilege count
308);
309}

310}

311void
312DisplayNtStatus(
313LPSTR szAPI,
314NTSTATUS Status
315)
316{
317//
318// Convert the NTSTATUS to Winerror. Then call DisplayWinError().
319//
320DisplayWinError(szAPI, LsaNtStatusToWinError(Status));
321}

322void
323DisplayWinError(
324LPSTR szAPI,
325DWORD WinError
326)
327{
328LPSTR MessageBuffer;
329DWORD dwBufferLength;
330//
331// TODO: Get this fprintf out of here!
332//
333fprintf(stderr,"%s error!\n", szAPI);
334if(dwBufferLength=FormatMessageA(
335FORMAT_MESSAGE_ALLOCATE_BUFFER |
336FORMAT_MESSAGE_FROM_SYSTEM,
337NULL,
338WinError,
339GetUserDefaultLangID(),
340(LPSTR) &MessageBuffer,
3410,
342NULL
343))
344{
345DWORD dwBytesWritten; // unused
346//
347// Output message string on stderr.
348//
349WriteFile(
350GetStdHandle(STD_ERROR_HANDLE),
351MessageBuffer,
352dwBufferLength,
353&dwBytesWritten,
354NULL
355);
356//
357// Free the buffer allocated by the system.
358//
359LocalFree(MessageBuffer);
360}

361}

362
363/*++
364This function enables system access on the account represented by the
365supplied SID. An example of such access is the SeLogonServiceRight.
366Note: to disable a given system access, simply remove the supplied
367access flag from the existing flag, and apply the result to the
368account.
369If the function succeeds, the return value is STATUS_SUCCESS.
370If the function fails, the return value is an NTSTATUS value.
371Scott Field (sfield)    14-Jul-95
372--*/

373NTSTATUS
374AddSystemAccessToAccount(
375LSA_HANDLE PolicyHandle,
376PSID AccountSid,
377ULONG NewAccess
378)
379{
380LSA_HANDLE AccountHandle;
381ULONG PreviousAccess;
382NTSTATUS Status;
383//
384// open the account object. If it doesn't exist, create a new one
385//
386if((Status=LsaOpenAccount(
387PolicyHandle,
388AccountSid,
389ACCOUNT_ADJUST_SYSTEM_ACCESS | ACCOUNT_VIEW,
390&AccountHandle
391)) == STATUS_OBJECT_NAME_NOT_FOUND)
392{
393Status=LsaCreateAccount(
394PolicyHandle,
395AccountSid,
396ACCOUNT_ADJUST_SYSTEM_ACCESS | ACCOUNT_VIEW,
397&AccountHandle
398);
399}

400//
401// if an error occurred opening or creating, return
402//
403if(Status != STATUS_SUCCESS) return Status;
404//
405// obtain current system access flags
406//
407if((Status=LsaGetSystemAccessAccount(
408AccountHandle,
409&PreviousAccess
410)) == STATUS_SUCCESS)
411{
412//
413// Add the specified access to the account
414//
415Status=LsaSetSystemAccessAccount(
416AccountHandle,
417PreviousAccess | NewAccess
418);
419}

420LsaClose(AccountHandle);
421return Status;
422}

423/*++
424This function grants a privilege to the account represented by the
425supplied SID. An example of such a privilege is the
426SeBackupPrivilege.
427Note: To revoke a privilege, use LsaRemovePrivilegesFromAccount.
428If the function succeeds, the return value is STATUS_SUCCESS.
429If the function fails, the return value is an NTSTATUS value.
430Scott Field (sfield)    13-Jul-95
431--*/

432NTSTATUS
433AddPrivilegeToAccount(
434LSA_HANDLE PolicyHandle,
435PSID AccountSid,
436LPWSTR PrivilegeName
437)
438{
439PRIVILEGE_SET ps;
440LUID_AND_ATTRIBUTES luidattr;
441LSA_HANDLE AccountHandle;
442LSA_UNICODE_STRING PrivilegeString;
443NTSTATUS Status;
444//
445// Create a LSA_UNICODE_STRING for the privilege name
446//
447InitLsaString(&PrivilegeString, PrivilegeName);
448//
449// obtain the LUID of the supplied privilege
450//
451if((Status=LsaLookupPrivilegeValue(
452PolicyHandle,
453&PrivilegeString,
454&luidattr.Luid
455)) != STATUS_SUCCESS) return Status;
456//
457// setup PRIVILEGE_SET
458//
459luidattr.Attributes=0;
460ps.PrivilegeCount=1;
461ps.Control=0;
462ps.Privilege[0]=luidattr;
463//
464// open the account object if it doesn't exist, create a new one
465//
466if((Status=LsaOpenAccount(
467PolicyHandle,
468AccountSid,
469ACCOUNT_ADJUST_PRIVILEGES,
470&AccountHandle
471)) == STATUS_OBJECT_NAME_NOT_FOUND)
472{
473Status=LsaCreateAccount(
474PolicyHandle,
475AccountSid,
476ACCOUNT_ADJUST_PRIVILEGES,
477&AccountHandle
478);
479}

480//
481// if an error occurred opening or creating, return
482//
483if(Status != STATUS_SUCCESS) return Status;
484//
485// add the privileges to the account
486//
487Status=LsaAddPrivilegesToAccount(
488AccountHandle,
489&ps
490);
491LsaClose(AccountHandle);
492return Status;
493}

494
495
posted on 2012-10-18 10:29 jackdong 閱讀(916) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Windows編程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产婷婷精品| 久久精品国产欧美激情| 欧美综合77777色婷婷| 欧美粗暴jizz性欧美20| 亚洲视频在线观看一区| 亚洲精品视频在线观看免费| 国产日韩精品视频一区| 欧美揉bbbbb揉bbbbb| 美日韩丰满少妇在线观看| 久久精品国产精品亚洲| 欧美中文在线观看国产| 亚洲女性裸体视频| 亚洲欧美在线磁力| 欧美专区日韩视频| 免费欧美日韩国产三级电影| 美女999久久久精品视频| 欧美另类专区| 国产欧美韩国高清| 欧美高清视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久久久久亚洲综合影院红桃 | 国产欧美一区二区三区在线老狼| 欧美/亚洲一区| 亚洲精品看片| 亚洲天堂网在线观看| 欧美一区二区久久久| 欧美成人免费va影院高清| 欧美日韩亚洲一区| 在线日韩电影| 欧美在线视屏| 一区电影在线观看| 欧美成人精品h版在线观看| 国产欧美视频一区二区| 99亚洲一区二区| 欧美激情精品久久久久久大尺度 | 欧美高清视频一区二区| 亚洲视频中文字幕| 国产精品成人一区二区网站软件| 亚洲国产裸拍裸体视频在线观看乱了 | 狂野欧美性猛交xxxx巴西| 一区二区不卡在线视频 午夜欧美不卡'| 亚洲欧美中文日韩在线| 国产精品美腿一区在线看| 日韩视频在线一区| 亚洲全部视频| 国产精品成人一区二区网站软件 | 欧美午夜电影完整版| 欧美亚洲日本国产| 国产精品乱人伦中文| 亚洲免费影视第一页| 日韩网站在线看片你懂的| 香蕉久久一区二区不卡无毒影院| 欧美日韩在线三区| 久久gogo国模啪啪人体图| 亚洲欧美三级在线| 18成人免费观看视频| 亚洲高清影视| 国产精品尤物| 亚洲国产成人tv| 国产精品欧美久久久久无广告| 久久九九免费| 欧美日韩国产三区| 欧美激情四色| 国产精品天天看| 亚洲国产va精品久久久不卡综合| 欧美视频你懂的| 蜜臀va亚洲va欧美va天堂| 欧美视频一区| 亚洲黄色影片| 黄色成人片子| 亚洲一区二区三区在线| 亚洲国产欧美在线人成| 久久精品最新地址| 久久精品毛片| 国产午夜亚洲精品羞羞网站| 亚洲精品一区二区三区四区高清| 黄色成人在线观看| 亚洲小说区图片区| 欧美亚洲一区| 国产亚洲成av人片在线观看桃 | 国产精品日韩欧美一区二区| 欧美福利影院| 亚洲精品九九| 欧美国产亚洲另类动漫| 亚洲成人在线视频网站| 黄色精品一区| 久久综合九色欧美综合狠狠| 国产精品va在线播放我和闺蜜| 亚洲国产精品嫩草影院| 一本一道久久综合狠狠老精东影业| 欧美a级大片| av成人毛片| 久久一区二区三区国产精品| 影院欧美亚洲| 国产精品国内视频| 欧美一区不卡| 亚洲人成网站777色婷婷| 亚洲人体影院| 国产原创一区二区| 欧美剧在线免费观看网站| 午夜精品久久久久久久久| 欧美aaaaaaaa牛牛影院| 中国成人黄色视屏| 亚洲电影第三页| 国产亚洲第一区| 欧美三区在线| 欧美xart系列高清| 午夜精品视频在线| 中文高清一区| 亚洲国产精品日韩| 国产主播在线一区| 国产视频在线观看一区二区三区| 可以看av的网站久久看| 欧美一区二区黄色| 久久国产精品网站| 香蕉免费一区二区三区在线观看 | 久久狠狠婷婷| 亚洲欧美电影在线观看| 一区二区日韩精品| 亚洲字幕一区二区| 亚洲尤物视频在线| 欧美一区二区三区另类| 欧美在线免费视频| 久久影院午夜片一区| 国产精品视频大全| 国产精品一卡二| 国产性色一区二区| 亚洲国产欧美在线| 一区二区三区国产精华| 亚洲私人黄色宅男| 久久黄色级2电影| 欧美国产日本| 亚洲性人人天天夜夜摸| 欧美在线看片| 欧美激情中文字幕一区二区| 欧美精品久久99久久在免费线| 欧美日韩999| 国产亚洲一区在线| 宅男噜噜噜66国产日韩在线观看| 先锋影音一区二区三区| 欧美激情在线播放| 久久精品亚洲乱码伦伦中文 | 欧美精品v国产精品v日韩精品| 欧美看片网站| 在线看欧美视频| 欧美在线免费| 亚洲无线视频| 欧美日韩一区二区视频在线观看| 激情综合视频| 久久人人九九| 欧美一区二区三区四区视频| 欧美欧美在线| 99伊人成综合| 亚洲精品色图| 欧美人与禽猛交乱配| 亚洲人成在线观看一区二区| 免费试看一区| 欧美成人伊人久久综合网| 亚洲高清精品中出| 欧美成人精品福利| 欧美激情一区二区三区高清视频| 久久精品国产清自在天天线 | 一区二区三区精品在线 | 黄色国产精品| 蜜臀av在线播放一区二区三区| 久久超碰97中文字幕| 亚洲高清一区二| 亚洲人成在线播放| 国产精品视频免费一区| 久久精品国产久精国产爱| 久久精品欧美日韩精品| 亚洲欧洲日本国产| 亚洲欧美日本日韩| 亚洲经典在线| 亚洲欧美日韩精品综合在线观看| 国产日韩精品综合网站| 免费成人性网站| 国产精品欧美一区二区三区奶水| 久久久水蜜桃| 国产精品久久久久久五月尺| 久久久久欧美精品| 欧美日韩亚洲综合一区| 久久精品国产亚洲aⅴ| 欧美夫妇交换俱乐部在线观看| 亚洲永久网站| 国产精品普通话对白| 亚洲另类视频| 日韩视频免费大全中文字幕| 久久精品二区| 久久久噜噜噜久久中文字幕色伊伊 | 欧美丰满高潮xxxx喷水动漫| 欧美美女视频| 最新中文字幕亚洲| 亚洲国产视频a| 鲁大师成人一区二区三区| 久久久国产91| 在线免费观看视频一区| 久久免费精品日本久久中文字幕| 亚洲欧美日韩在线观看a三区| 欧美日韩免费看|